自定义 CheckboxSelectMultiple 小部件的模板:可以将其他对象属性作为属性传递吗?

问题描述

我有一个模型表单,它将多对多字段的选择表示为复选框。 两个相关模型如下:

乘客模型:

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 方法并使用参数中传递的值从数据库中检索查询集,我实现了我想要实现的目标。这是作为附加属性添加到字典中的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...