【问题标题】:Customising the template for a CheckboxSelectMultiple widget: Can other object properties be passed as attributes?自定义 CheckboxSelectMultiple 小部件的模板:可以将其他对象属性作为属性传递吗?
【发布时间】:2021-01-04 14:15:35
【问题描述】:

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

乘客模型:

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(),
        }

【问题讨论】:

  • 一直在检查。这些模板应该是什么样子?任何链接到那个。我的意思是哪些变量将允许访问 HTML 模板中的查询集和选项?

标签: forms widget django-crispy-forms


【解决方案1】:

通过覆盖 CustomCheckbox 类中的 create_option 方法并使用参数中传递的值从数据库中检索查询集,我实现了我想要实现的目标。这是作为附加属性添加到字典中的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2017-11-26
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    相关资源
    最近更新 更多