Django的 - “extra_fields”在CustomModelForm是给“无法lookuup”试图加载窗体时错误在模型内联接口

问题描述 投票:0回答:2

我一个应用程序命名Question在那里我models.py定义两种型号QuestionAlternative如下:

class Question(models.Model):

    question = models.CharField(max_length=255, blank=False, null=False)
    chapter = models.ForeignKey(Chapter, on_delete=models.CASCADE)
    rating = models.IntegerField(default=1)


class Alternative(models.Model):

    alternative = models.CharField(max_length=255, blank=False, null=False)
    question = models.ForeignKey(Question, on_delete=models.CASCADE)

我已经取得了在那里我已经创建了我希望出现在我的AlternativeForm以及Alternative forms管理视图,其中替代领域将出现在内嵌视图,但额外的字段值将不会被保存在一个数据库额外字段的自定义窗体Question (因为我想要做一些手工操作与字段的值)。我forms.py如下:

class AlternativeForm(forms.ModelForm):

    extra_field = forms.BooleanField(required=False)

    def save(self, commit=True):
        extra_field = self.cleaned_data.get('extra_field', None)
        # will do something with extra_field here...
        return super(AlternativeForm, self).save(commit=commit)

    class Meta:
        model = Alternative
        fields = '__all__'

在我admin.py我做了他们之间的关系内嵌如下:

class AlternativeInline(admin.TabularInline):
    form = AlternativeForm
    model = Alternative

@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
    inlines = [AlternativeInline,]

@admin.register(Alternative)
class AlternativeAdmin(admin.ModelAdmin):
    model = Alternative
    form  = AlternativeForm

我在这种情况下,越来越AttributeError: Unable to lookup 'extra_field' on Alternative or AlternativeInline。我想,以显示Questionapps管理视图的内嵌视图这些额外的领域。有没有办法做到这一点或什么是错的,我目前的做法。谢谢。

python django
2个回答
3
投票

我找到了解决这一猜测时post。每个人都应该定义label场的自定义字段类似如下避免这种错误AttributeError: Unable to lookup 'extra_field' on Alternative or AlternativeInline

class AlternativeForm(forms.ModelForm):

    extra_field = forms.BooleanField(label='is_answer', required=False)

    def save(self, commit=True):
        # extra_field = self.cleaned_data.get('extra_field', None)
        # ...do something with extra_field here...
        return super(AlternativeForm, self).save(commit=commit)

0
投票

要在管理的额外字段:

class YourModelAdmin(admin.ModelAdmin):

    form = YourModelForm

    fieldsets = (
        (None, {
            'fields': ('other fields here', 'extra_field',),
        }),
    )
© www.soinside.com 2019 - 2024. All rights reserved.