Django - CustomModelForm 中的“extra_fields”在尝试加载该表单时在模型内联接口中给出“无法查找”错误

2024-06-23

我有一个名为Question我定义了两个模型Question and Alternative在 models.py 中如下:

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 formsQuestion管理视图,其中替代字段将出现在内联视图中但多余的字段值不会保存在DB中(因为我想对该字段的值进行一些手动操作)。我的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在这种情况下。我想显示那些额外的字段 in the 内联视图 of Question应用程序管理视图。有什么办法可以做到这一点,或者我目前的方法有什么问题。 谢谢。


我在推测这个问题时找到了解决方案post https://stackoverflow.com/questions/35701930/in-django-inline-model-admin-how-to-prefill-extra-fields-with-values。人们应该定义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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django - CustomModelForm 中的“extra_fields”在尝试加载该表单时在模型内联接口中给出“无法查找”错误 的相关文章

随机推荐