首页 > 解决方案 > 使用之前排除的 ForeignKey 字段扩展 ModelForm

问题描述

我有以下模型:

class Watchman(models.Model):
    group = models.ForeignKey('groups.Group')
    name = models.CharField(max_length=64)

以及以下模型形式:

class NewWatchmanForm(forms.ModelForm):
    class Meta:
        model = Watchman
        fields = ['name']

在创建新的 Watchman 时,我不知道group它属于哪个,因此nameNewWatchmanForm. 但是,一旦我确定了group它所属的正确位置,我就会使用这种形式来使用适当的更新对象group

class UpdateWatchmanForm(NewWatchmanForm):
    group = forms.ModelChoiceField(queryset=Group.objects.all())
    class Meta(NewWatchmanForm.Meta):
        fields = NewWatchmanForm.Meta.fields + ("group",)

我很好奇是否有更好的方法来重用我的NewWatchmanForm. 理想情况下,我想避免group显式声明,如下所示:

class UpdateWatchmanForm(NewWatchmanForm):
    # group = forms.ModelChoiceField(queryset=Group.objects.all())
    class Meta(NewWatchmanForm.Meta):
        fields = NewWatchmanForm.Meta.fields + ("group",)

但是,如果我这样做,我会收到此错误:

fields = NewWatchmanForm.Meta.fields + ("group",)
TypeError: can only concatenate list (not "tuple") to list

对现有 ModelForm 进行子类化并包含 ForeignKey 字段(不重新定义forms.ModelChoiceField(...))的正确方法是什么?

标签: djangodjango-forms

解决方案


我实际上应该尝试阅读错误:|

问题是我试图将一个列表与一个元组连接起来。事实证明,删除group子类中的字段效果很好:

class UpdateWatchmanForm(NewWatchmanForm):
    class Meta(NewWatchmanForm.Meta):
        # Extend list with a list, not a tuple!
        fields = NewWatchmanForm.Meta.fields + ["group"]

推荐阅读