我有以下型号:
class PackageCategoryChoices(models.Model):
name = models.CharField(max_length=100, blank=False)
icon = models.CharField(max_length=100)
def __unicode__(self):
return self.name
和这个表格
class TripForm(forms.ModelForm):
categories = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=PackageCategoryChoices.objects.all())
基本上我在数据库中保存了一个图标,我只是想将它渲染成一个表单。我无法从模板访问模型信息或将额外的模型字段添加到表单字段。
我想要类似的东西:
<div class="checkbox">
<label for="id_categories_1"><input id="id_categories_1" name="categories" type="checkbox" value="1" />
<span class="glyphicons envelope"></span><!-- this is the icon -->
Paquete pequeño<!-- this is the name -->
</label>
</div>
我尝试更改__unicode_方法,但它与其他表单发生冲突。
答案 0 :(得分:4)
您需要继承ModelMultipleChoiceField
并覆盖label_from_instance
方法:
from django.utils.html import format_html
class IconChoiceField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return format_html('<span class="glyphicons {}"></span> {}',
obj.icon, obj.name)
class TripForm(forms.Form):
categories = IconChoiceField(widget=forms.CheckboxSelectMultiple,
queryset=PackageCategoryChoices.objects.all())