没有标签的ModelForm的额外字段,不会在InlineModelAdmin中呈现

2024-03-28 19:17:33 发布

您现在位置:Python中文网/ 问答频道 /正文

要在adminadd页面中添加一个额外字段,可以使用以下代码:

你知道吗型号.py地址:

class Parent(models.Model):
    pass


class Child(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.PROTECT)

你知道吗表单.py地址:

class ChildForm(forms.ModelForm):
    extra_field = forms.CharField()

    class Meta:
        model = Child
        fields = '__all__'

你知道吗管理员.py地址:

@admin.register(models.Child)
class ChildAdmin(admin.ModelAdmin):
    form = forms.ChildForm

ChildParentadd页中Parent的内联时,如何添加相同的额外字段?你知道吗


以下管理员.py地址:

class ChildInline(admin.TabularInline):
    model = models.Child
    form = forms.ChildForm


@admin.register(models.Parent)
class ParentAdmin(admin.ModelAdmin):
    inlines = (ChildInline,)

结果:

Traceback (most recent call last):
  File "django/db/models/options.py", line 617, in get_field
    return self.fields_map[field_name]
KeyError: 'extra_field'

...

django.core.exceptions.FieldDoesNotExist: Child has no field named 'extra_field'

...

AttributeError: Unable to lookup 'extra_field' on Child or ChildInline

Tags: pychildfieldmodeladminonmodels地址
1条回答
网友
1楼 · 发布于 2024-03-28 19:17:33

根据this answer,添加标签将使内联线按预期工作:

class ChildForm(forms.ModelForm):
    extra_field = forms.CharField(label='Extra Field')

    class Meta:
        model = Child
        fields = '__all__'

相关票:https://code.djangoproject.com/ticket/30520#ticket

相关问题 更多 >