Django使用模型中的图标渲染CheckboxSelectMultiple

时间:2014-12-19 20:01:13

标签: 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):
    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_方法,但它与其他表单发生冲突。

1 个答案:

答案 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())