生成每个复选框所需的Django form.ModelMultipleChoiceField标签

时间:2018-09-12 07:10:06

标签: django django-models django-forms django-templates

请根据分类模型中的“标题”字段,为每个生成的复选框(在html中)提供的名称具有不同的名称。 html输出为每个产生的复选框赋予相同的标签(名称)。

这是我的表格。py

ProductFilterForm(forms.Form)类:

category_id = forms.ModelMultipleChoiceField(
    label='Categories',
    queryset=Category.objects.all(), 
    widget=forms.CheckboxSelectMultiple, 
    required=False)
如您所见,

会生成此html。但我希望每个人都有基于类别标题的名称。 “显示了类别对象,但这不是我想要的”

</label> <div class="controls "> <label class="checkbox"> <input type="checkbox" name="category_id" id="id_category_id_1" value="1" >Category object
        </label> <label class="checkbox"> <input type="checkbox" name="category_id" id="id_category_id_2" value="2" >Category object
        </label> <label class="checkbox"> <input type="checkbox" name="category_id" id="id_category_id_3" value="3" >Category object
        </label> <label class="checkbox"> <input type="checkbox" name="category_id" id="id_category_id_4" value="4" >Category object
        </label> </div> </div> <div id="div_id_max_price" class="form-group"> <label for="id_max_price" class="control-label ">

这是模型。py

class Product(models.Model):
    title = models.CharField(max_length=120)
        description = models.TextField(blank=True, null=True)
        price = models.DecimalField(decimal_places=2, max_digits=20)
        active = models.BooleanField(default=True)
        categories = models.ManyToManyField('Category', blank=True)
        default = models.ForeignKey('Category', related_name='default_category', null=True, blank=True)


        def __unicode__(self):
            return self.title 
class Category(models.Model):
    title = models.CharField(max_length=120, unique=True)
    slug = models.SlugField(unique=True)
    description = models.TextField(null=True, blank=True)
    active = models.BooleanField(default=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)

    def __unicode__(self):
        return self.title

请这是输出

            Categories
        </label> <div class="controls "> <label class="checkbox"> <input type="checkbox" name="category_id" id="id_category_id_1" value="1" >Category object
    </label> <label class="checkbox"> <input type="checkbox" name="category_id" id="id_category_id_2" value="2" >Category object
    </label> <label class="checkbox"> <input type="checkbox" name="category_id" id="id_category_id_3" value="3" >Category object
    </label> <label class="checkbox"> <input type="checkbox" name="category_id" id="id_category_id_4" value="4" >Category object
    </label> </div> 

我希望将** Category对象**替换为模型中的每个Category标题。

我一直想在过去几天内解决此问题。 我认为我只需要在forms.py中指定标签,但我不知道该怎么做如此。 表单产生的每个复选框都被命名为“ CATEGORY OBJECT”。 我希望在类别模型

中将它们命名为标题字段

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么在模型类中定义 str 函数应该会有所帮助。

class Category(models.Model):
  ...

  def __str__():
    return Category.name

P.S .:我的人口不足,无法评论您的问题。如果您不满意,请告诉我。