gpt4 book ai didi

django - 如何向 Django 表单小部件添加额外的上下文

转载 作者:行者123 更新时间:2023-12-04 17:35:38 25 4
gpt4 key购买 nike

基本的 Django CheckboxSelectMultiple 小部件允许将 labelvalue 传递给模板。我想从模型中添加 2 个额外的字段,但我不知道如何添加,尽管我相信这是通过子类化 get_context

我有这个模型,我想在小部件中包含图标描述

class AddOnItem(models.Model):
name = models.CharField(
verbose_name = 'AddOn Title',
max_length = 50
)
description = models.CharField(
verbose_name = 'Description',
max_length = 255
)
icon = models.FileField(upload_to="addon_icons/", blank=True, null=True)
active = models.BooleanField(default=False)

在我的表单中我指定了这个小部件

class JobPostWizardForm1(forms.ModelForm):
class Meta:
model = Job
fields = [
...,
'addons'
]

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
...

self.fields['addons'].widget = AddOnCheckboxSelectMultiple()
self.fields['addons'].queryset = AddOnItem.objects.filter(active=True)

我将 CheckboxSelectMultiple 小部件子类化为

class AddOnCheckboxSelectMultiple(forms.CheckboxSelectMultiple):
template_name = 'jobboard/widgets/addon_checkbox_select.html'
option_template_name = 'jobboard/widgets/addon_checkbox_option.html'

def get_context(self, name, value, attrs):
context = super().get_context(name, value,attrs)
return context

显然这目前没有任何作用,但我想添加类似

的内容
context['icon'] = obj.icon

但我不知道该怎么做。也就是说,我不了解 Django 小部件如何获取对象。

如果有任何帮助,我将不胜感激 - 谢谢

最佳答案

这可能不是最好的解决方案,但它确实有效。

我像这样覆盖 create_option:

def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
ctx = super().create_option(name, value, label, selected, index, subindex=subindex, attrs=attrs)
obj = AddOnItem.objects.get(id=int(value))
ctx['icon'] = obj.icon
ctx['description'] = obj.description
ctx['price'] = obj.price

return ctx

然后我可以在模板中使用 {{ widget.field_name }} 获取这些属性。

关于django - 如何向 Django 表单小部件添加额外的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56771884/

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