如何使M2M关系成为必填字段?

时间:2018-08-13 07:07:48

标签: django django-models django-forms

我有2个型号的产品和类别

class Product(models.Model):
    categories = models.ManyToManyField(Category, related_name='products')

class ProductModelForm(ModelForm):
    class Meta:
        model = Product
        fields = ['categories', 'name', 'description']

默认情况下,如果未引入类别,则Django不会引发验证错误。

如何使M2M关系成为必填字段?

2 个答案:

答案 0 :(得分:1)

您不能在模型层上强制执行此操作,因为多对多关系会构造一个额外的表来表示该关系,并且没有(至少没有方言不变)指定每个ID的方法它所引用的表中应该存在。

不过,我们可以通过将其设置为ModelForm来强制实施(例如,required=True):

class ProductModelForm(EnhancedWidgetModelForm):
    categories = forms.ModelMultipleChoiceField(queryset=Category.objects.all(), required=True)
    class Meta:
        model = Product
        fields = ['categories', 'name', 'description']

答案 1 :(得分:0)

尝试:

class Product(models.Model):
categories = models.ManyToManyField(Category, related_name='products', blank=False)