我有一个名为Goal的模型,另一个名为Action。这里我强调一下重要的部分:Django - 反序列化保存ManyToMany字段的对象
class Goal(models.Model):
leaders = models.ManyToManyField(User, null=True)
class Action(models.Model):
before = models.TextField(null=True)
after = models.TextField(null=True)
当用户编辑一个目标时,我保存一个新的Action对象。此Action对象的属性之一是之前和之后。之前和之后都是序列化的目标对象。他们稍后将用于记录Goal对象中发生了什么变化。
所有属性正常工作(如标题和描述),问题是所谓的“领袖”一个多对多场,当我反序列化目标对象有:
before = action.before
for obj in serializers.deserialize("xml", before):
before_object = obj
after = action.after
for obj in serializers.deserialize("xml", after):
after_object = obj
,并尝试与访问领导人场:
before_object_leaders = before_object.object.leaders.all()
after_object_leaders = after_object.object.leaders.all()
leaders_updated = True
if set(before_object_leaders) == set(after_object_leaders):
leaders_updated = False
before_object_leaders获取目标表为目标对象的当前值,而不是在反序列化对象,这就是我想要的价值。 (旧值,更新前)
请帮忙,我疯了。谢谢!
嘿,非常感谢亚瑟!你的评论让我意识到了这个问题,我是Django的新手,所以我不知道leaders.all()实际上是再次查询数据库。 :) – thyagx