django - 使用之前排除的 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
它属于哪个,因此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"]
推荐阅读
- actions-on-google - Google 上的操作链接到地图
- google-api - 尝试共享 Google 日历时未显示 Google 服务帐户电子邮件
- angular - 用户双击时弹出角度禁用上下文菜单
- ios - 从不同的故事板复制/粘贴视图时,Xcode 11 崩溃
- python - 使用和不使用 .loc 过滤熊猫数据框
- user-interface - 有什么办法可以在标签中的两行之后得到省略号?
- react-native - componentDidUpdate 中的更新变量失败
- android - React 原生条码生成器
- json - Microsoft Excel - 从 JSON 列中获取值
- python - Keras fit_generator 将图像大小作为 batch_size