问题描述
我有一个模型表单,它将多对多字段的选择表示为复选框。 两个相关模型如下:
乘客模型:
class Passenger(models.Model):
... attributes etc .....
trip_addons = models.ManyToManyField(AddOn,blank=True)
“附加”模型:
class Addon(models.Model):
name = models.CharField(max_length=254)
description = models.TextField()
price = models.DecimalField(max_digits=8,decimal_places=2)
image = models.ImageField(null=True,blank=True)
image_thumb = models.ImageField(null=True,blank=True)
image_url = models.URLField(max_length=1024,null=True,blank=True)
def __str__(self):
return self.name
但不是呈现默认的 html 复选框,我希望在 this 链接中呈现更像第三个示例“选择您的主菜”的“插件”选项,此外还有图片和简短描述到名字。
我已经创建了自己的模板供小部件使用,并且有效。我只是想知道是否可以将描述、图片和价格数据传递给这些模板?
forms.py
class CustomCheckBox(forms.CheckBoxSelectMultiple):
"""
Creates a custom checkBox select widget that subclasses Django's
CheckBoxSelectMultiple and customises it with a different template
"""
template_name = 'bookings/forms/checkBox_select.html'
option_template_name = 'bookings/forms/checkBox_option.html'.
在我的 Modelform 的 Meta 中:
widgets = {
"trip_addons": CustomCheckBox(),}
解决方法
通过覆盖 CustomCheckbox 类中的 create_option 方法并使用参数中传递的值从数据库中检索查询集,我实现了我想要实现的目标。这是作为附加属性添加到字典中的。