Django根据模型实例来限制ModelForm中manymany字段的选项



我只想显示已经存储在模型的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来做到这一点:

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

然后在视图中:

color_form = ColorForm(instance=design)

但是我不完全理解设置实例的作用,我认为实例不是我要找的,因为它仍然列出了所有的颜色

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

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

因此,在你看来:

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

相关内容

  • 没有找到相关文章

最新更新