Django基于模型实例限制ModelForm中ManyToMany字段的选项

时间:2015-10-12 11:20:55

标签: django django-forms manytomanyfield

我只想显示已存储在模型“ManyToManyField中的选项。 我有模型Order,我希望有一个基于模型的表格,如下所示:

class OrderForm(ModelForm):
    class Meta:
        model = Order
        fields = ['amount', 'color']

现在我不希望将所有颜色显示为选项,而是仅将颜色实例显示在另一个模型的ManyToManyField中。另一个模型是Design:

class Design(models.Model):
    color = models.ManyToManyField('maker.Color')
    # ...

使用ModelForm时,这是否完全可以?

尝试

我尝试过使用ModelForm of Design并设置实例:

class ColorForm(ModelForm):
    class Meta:
        model = Design
        fields = ['color']

然后在视图中:

color_form = ColorForm(instance=design)

但是我并不完全明白设置实例的作用,我认为实例不是我想要的,因为它仍然列出了所有颜色。

1 个答案:

答案 0 :(得分:2)

instance设置与限制选择无关。实质上,它只是使用特定记录中的值填充表单的值。您通常在编辑操作中提供实例,而在添加操作中跳过它。

models.ManyToManyFieldModelForm的表示形式为forms.ChoiceField,您可以简单地覆盖其queryset属性,并指定所需的查询集。

因此,在您看来:

form = OrderForm()
form.fields['color'].queryset = Design.object.all()  # for example