django:如何知道是否使用m2m字段创建模型而不是None

时间:2016-10-17 15:39:16

标签: django django-models

所以基本上我试图覆盖模型的save方法来判断是否指定了某个非必需字段,即m2m字段。如果是,则将其自己的布尔字段之一更新为True。目前我有这样的事情:

class Flag(models.Model):
    name = models.CharField(max_length=300)
    def __str__(self):
        return self.name

class Model(models.Model):
    BooleanField = models.BooleanField(default = False)
    m2mField = models.ManyToManyField(Flag)


    def save(self, *args, **kwargs):
            super(Model, self).save(*args, **kwargs)
            if Model.objects.filter(id = self.id, m2mField = None).exists():
                Model.objects.filter(id = self.id).update(BooleanField = True)

现在这对我不起作用。我并不关心m2m字段中的内容,只是想知道用户在创建此实例时是否指定了该字段。

TIA

编辑:我用更现实的定义进行更新。

1 个答案:

答案 0 :(得分:0)

您可以尝试检查m2mField计数是否大于0,如下所示:

class Model(models.Model):
    BooleanField = models.BooleanField(default = False)
    m2mField = models.ManyToManyField(Flag, blank=True)


    def save(self, *args, **kwargs):
        self.BooleanField = True if self.pk is not None and self.m2mField.count() > 0 else False
        super(Model, self).save(*args, **kwargs)

blank=True参数传递给m2mField可能是个好主意。