Django render复选框从模型中选择多个图标

Django render复选框从模型中选择多个图标,django,django-forms,Django,Django Forms,我有以下型号: 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): cat

我有以下型号:

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方法,但它与其他形式冲突。

您需要将
modelmultipechoicefield
子类化,并覆盖
label\u from\u 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())
来自django.utils.html导入格式\u html
类IconChoiceField(forms.ModelMultipleChiceField):
def标签来自_实例(self,obj):
返回格式为html({}),
对象图标,对象名称)
类TripForm(forms.Form):
categories=IconChoiceField(widget=forms.CheckboxSelectMultiple,
queryset=PackageCategoryChoices.objects.all()

您需要子类化
modelmultipechoicefield
并重写
label\u from\u 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())
来自django.utils.html导入格式\u html
类IconChoiceField(forms.ModelMultipleChiceField):
def标签来自_实例(self,obj):
返回格式为html({}),
对象图标,对象名称)
类TripForm(forms.Form):
categories=IconChoiceField(widget=forms.CheckboxSelectMultiple,
queryset=PackageCategoryChoices.objects.all()