我有一个名为Goal的模型和另一个名为Action的模型。在这里,我将重点介绍重要部分:
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对象。此对象的一个属性是之前和之后。前后序列化目标对象。稍后将使用它们来记录Goal对象中的更改内容。
所有属性都可以正常工作(比如标题和描述),当我使用以下命令反序列化目标对象时,问题出现在名为'leaders'的ManyToMany字段中:
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获取Goal对象的Goal表中的当前值,而不是反序列化对象中的值,这就是我想要的。 (更新前的旧值)
请帮助,我疯了。谢谢!
答案 0 :(得分:0)
这里的问题是,只要你打电话:before_object.object.leaders
,你就会得到一个ModelManager,它会在你调用方法all()
时进行新的数据库查询!这就是ModelManager的默认行为。
因此,要解决您的问题,您必须在Model对象中编写一个新的管理器。这位经理将负责领导的反序列化。
这里有一些参考: