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()实际上又在查询数据库了。:)