带有复选框的表单中的多域字段在 django 模板中插入了选择字段
我有 ManyToManyField 模型。现在我需要表单,但不需要模板中的选择字段。
class Foo(models.Model):
name = models.CharField(max_length=50)
short_description = models.CharField(max_length=100)
price = models.IntegerField()
def __unicode__(self):
return self.name
class Bar(models.Model):
foo = models.ManyToManyField(Foo, blank=True, null=True, related_name='foos')
def __unicode__(self):
return unicode(self.id)
我真正需要的是在模板中使用复选框显示 Foo 模型中的所有数据,而不是在模板中使用 model.Form 和 {{ form }} 调用时选择我拥有的字段。
class BarForm(forms.ModelForm):
class Meta:
model = Bar
视图.py
def show_form(request, id):
foo = get_object_or_404(Foo, id=id)
form = BarForm()
...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要将
ManyToManyField
显示为复选框而不是选择字段,您需要在相应ModelForm
子类的Meta
类中设置小部件。然后,要在每个复选框上显示自定义标签,创建您自己的表单字段类派生自ModelMultipleChoiceField
,并覆盖label_from_instance
。您还可以将 HTML 标签添加到label_from_instance
返回的字符串中,使其看起来像您想要的那样漂亮,但请记住用 mark_safe。To show a
ManyToManyField
as checkboxes instead of a select field, you need to set the widget in theMeta
class of the appropriateModelForm
subclass. Then to show a custom label on each checkbox, create your own form field class derived fromModelMultipleChoiceField
, and overridelabel_from_instance
. You may also add HTML tags to the string returned bylabel_from_instance
to make it look as pretty as you want, but remember to wrap the returned string with mark_safe.