gpt4 book ai didi

django - 带有复选框的表单中的manytomany字段在django模板中安装了选择字段

转载 作者:行者123 更新时间:2023-12-04 06:03:37 25 4
gpt4 key购买 nike

我有带有 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

View .py

def show_form(request, id):
foo = get_object_or_404(Foo, id=id)
form = BarForm()
...

最佳答案

要将 ManyToManyField 显示为复选框而不是选择字段,您需要在适当的 ModelFormMeta 类中设置小部件子类。然后在每个复选框上显示自定义标签,create your own form field class derived from ModelMultipleChoiceField, and override label_from_instance .您还可以将 HTML 标记添加到 label_from_instance 返回的字符串中,使其看起来像您想要的那样漂亮,但请记住用 mark_safe 包裹返回的字符串。 .

from django.forms.widgets import CheckboxSelectMultiple
from django.forms.models import ModelMultipleChoiceField
...
class CustomSelectMultiple(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return "%s: %s %s" %(obj.name, obj.short_description, obj.price)

class BarForm(forms.ModelForm):
foo = CustomSelectMultiple(queryset=Foo.objects.all())
class Meta:
model = Bar
widgets = {"foo":CheckboxSelectMultiple(),}

关于django - 带有复选框的表单中的manytomany字段在django模板中安装了选择字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8630977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com