Python Django-反序列化保存多个字段的对象

Python Django-反序列化保存多个字段的对象,python,django,xml-deserialization,Python,Django,Xml Deserialization,我有一个模型叫目标,另一个模型叫行动。在这里,我要强调以下重要部分: class Goal(models.Model): leaders = models.ManyToManyField(User, null=True) class Action(models.Model): before = models.TextField(null=True) after = models.TextField(null=True) 当用户编辑目标时,我会保存一个新的动作对象。此操

我有一个模型叫目标,另一个模型叫行动。在这里,我要强调以下重要部分:

class Goal(models.Model):
    leaders = models.ManyToManyField(User, null=True)

class Action(models.Model):
    before = models.TextField(null=True)
    after = models.TextField(null=True)
当用户编辑目标时,我会保存一个新的动作对象。此操作对象的属性之一是before和after。前后是序列化的目标对象。稍后将使用它们记录目标对象中发生的更改

所有属性都可以正常工作(如标题和说明),问题在于当我使用以下内容反序列化目标对象时,有一个名为“leaders”的多个字段:

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
在\u object之前\u leaders获取目标对象的目标表中的当前值,而不是反序列化对象中的值,这正是我想要的。(更新前的旧值)


请帮帮我,我快疯了。谢谢

这里的问题是,只要您调用:
before\u object.object.leaders
您就会得到一个ModelManager,当您调用方法
all()
时,它将进行新的DB查询!这是ModelManager的默认行为

因此,要解决您的问题,您必须在模型对象中编写一个新的管理器。这位经理将负责领导的反序列化

以下是一些参考资料:


嘿,非常感谢亚瑟!你的评论让我意识到了这个问题,我是Django的新手,所以我不认识leaders。all()实际上又在查询数据库了。:)