如何在保存相关模型的实例时自动更新模型的字段?我需要解决这个问题:
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中创建的;不需要内联表单集。
感谢您的帮助。
答案 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