保存其他多对多相关模型时,自动更新Django模型中的特定字段

时间:2017-02-23 12:47:08

标签: django django-models django-views many-to-many

如何在保存相关模型的实例时自动更新模型的字段?我需要解决这个问题:

class First(models.Model):
    name = models.CharField(max_length=100)
    assigned = models.BooleanField(default=False)

class Second(models.Model):
    some_attribute = models.CharField(max_length=100)
    firsts = models.ManyToManyField(First)

因此,每次创建第二个实例时,我都想自动更新第一个模型的每个相关对象的“已分配”属性,并将其更改为True。

为了简化,我并不是说我在同一个项目中的不同应用程序中有这个模型,我想这不是那么相关,我只需要它的基础知识。

我试图覆盖Second的save方法但是无法迭代相关的对象:

def save(self, *args, **kwargs):
    super(Second, self).save(*args, **kwargs) # Call the "real" save() method.
    items = self.firsts
    for item in items:
        item.assigned = True
        item.save()

我也试图避免使用Signals,因为这听起来像是一个先进的主题而且我是一名初学程序员而且我知道应该有一个更简单的方法来做到这一点。 'First'对象是在该模型的CreateView中创建的;不需要内联表单集。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

save模型的Second方法不适合做您需要的方法,因为此时相关对象尚未更新。保存First模型后,您应该更新Second模型,例如,使用用于创建或更新save实例的表单的Second方法。

Second模型中:

def update_firsts(self):
    items = self.firsts.all()
    for item in items:
        item.assigned = True
        item.save()

表格形式:

def save(self, *args, **kwargs):
    instance = super(SecondForm, self).save(*args, **kwargs)
    instance.update_firsts()
    return instance