无法在__init__中向ModelForm添加字段

4 投票
2 回答
4212 浏览
提问于 2025-04-16 11:29

我在使用 ModelForm 的时候遇到了一个问题。字段 test1 显示出来了,但 test2 却没有。尝试调整 base_fields 也没有解决这个问题。

# models.py
class Country(models.Model):
    name = CharField(max_length=100)

# admin.py
class CountryAdminForm(ModelForm):
    test1 = forms.CharField('test1')

    def __init__(self, *args, **kwargs):
        super(CountryAdminForm, self).__init__(*args, **kwargs)
        self.fields['test2'] = forms.CharField('test2')

    class Meta:
        model = Country

class CountryAdmin(admin.ModelAdmin):
    form = CountryAdminForm

admin.site.register(Country, CountryAdmin)

谢谢。

2 个回答

2

在Django 1.4中,我不能用 self.Meta.fields.append,因为这里的 fields 是一个元组(tuple)。你需要用 self.Meta.fields += ('another_field',) 这种方式来添加字段,比如这样。

14

解决了!

class CountryAdminForm(ModelForm):
    test1 = forms.CharField('test1')

    def __init__(self, *args, **kwargs):
        super(CountryAdminForm, self).__init__(*args, **kwargs)
        self.fields['test2'] = forms.CharField('test2')
        self.Meta.fields.append('test2')

    class Meta:
        model = Country
        fields = ['name', 'test1',]

...

撰写回答