如何在不覆盖 ModelForm 中的字段定义的情况下将 ManyToManyField 小部件更改为 CheckboxSelectMultiple
Posted
技术标签:
【中文标题】如何在不覆盖 ModelForm 中的字段定义的情况下将 ManyToManyField 小部件更改为 CheckboxSelectMultiple【英文标题】:How to change ManyToManyField widget to CheckboxSelectMultiple without overriding field definition in a ModelForm 【发布时间】:2011-03-11 05:09:12 【问题描述】:我有 django ModelForm
用于具有 ManyToManyField 的模型。我想将此字段的小部件更改为CheckboxSelectMultiple
。我可以在不覆盖表单定义中的字段的情况下执行此操作吗?
我经常使用类似这样的代码:
class MyModel(ModelForm):
m2m_field = forms.ModelMultipleChoiceField(queryset = SomeModel.objects.all(),
widget = forms.CheckboxSelectMultiple())
还有其他方法吗?
编辑:我需要这个用于 Django 1.1.1 项目
【问题讨论】:
【参考方案1】:如果您使用的是 Django 1.2+,则可以在内部 Meta 类中使用 widgets
元组。
class MyModelForm(forms.ModelForm):
class Meta:
widgets = 'm2m_field': forms.CheckboxSelectMultiple
见the documentation。
【讨论】:
酷一个!谢谢!不幸的是,在这个项目中我使用 Django 1.1.1,所以它无济于事,无论如何感谢提示。【参考方案2】:另一种方法是在 ModelForm 的 init 中执行此操作:
class MyModel(ModelForm):
def __init__(self, *args, **kwargs):
super(MyModel, self).__init__(*args, **kwargs)
self.fields['m2m_field'].widget = forms.CheckboxSelectMultiple()
[...]
【讨论】:
以上是关于如何在不覆盖 ModelForm 中的字段定义的情况下将 ManyToManyField 小部件更改为 CheckboxSelectMultiple的主要内容,如果未能解决你的问题,请参考以下文章
如何在不覆盖当前数据的情况下更新 Mongoose 中的混合类型字段?
覆盖 ModelForm.save 不会更新所有受影响的字段