使用以前排除的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(...)(的正确方法是什么?

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

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

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

最新更新