我有以下模型:
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
,因此name
是NewWatchmanForm
中定义的唯一模型字段。然而,一旦我确定了它所属的正确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"]