Django ManyToMany默认为所有值

9vw9lbht  于 2022-11-18  发布在  Go
关注(0)|答案(4)|浏览(160)

我有以下模型:

class Product(models.Model):
    provinces = models.ManyToManyField('Province', related_name='formats')

默认情况下,产品可以在每个省销售。我如何定义模型“产品”,使每个创建的产品默认具有所有省?
谢谢你!

mf98qq94

mf98qq941#

使用default键。你不能直接将默认模型值设置为列表之类的可迭代对象,所以把它们 Package 在一个可调用对象中,就像Django文档建议的那样:https://docs.djangoproject.com/en/1.8/ref/models/fields/

def allProvinces():
    return provincesList

provinces = models.ManyToManyField('Province', related_name='formats', default=allProvinces)
qaxu7uf2

qaxu7uf22#

您需要使用post_保存信号。
您不能使用默认字段选项用于多对多字段,如here所述

wlzqhblo

wlzqhblo3#

您不能直接将列表直接添加到M2M,您应该首先获取对象:

def allProvinces():
    provinceList = Province.objects.all()
    return provinceList

然后添加默认值= allProvince:)

ve7v8dk2

ve7v8dk24#

我从https://stackoverflow.com/a/32068983/1581629展开,执行以下操作:

class Product(models.Model):
    ...
    def save(self, *args, **kwargs):
        created_flag = False
        if not self.pk:
            created_flag = True
        super().save(*args, **kwargs)
        if created_flag:
            self.provinces = Province.objects.all()

相关问题