【发布时间】:2009-07-16 10:44:39
【问题描述】:
我已经序列化了我的 django 模型:
serializers.serialize(MyModel.objects.filter(color="Red"))
得到这个输出:
<object model="example.example" pk="133">
<field name="name" type="CharField">John Smith</field>
<field name="color" type="CharField">Red</field>
... #more fields
</object>
所以你可以看到我有 pk="133":
现在我想再次将其反序列化为 django 模型并将 save() 保存到数据库中,但使用不同的 pk,因此它应该使用新 id 创建新记录。
我正在尝试解析 XML 并使用以下方法更改 pk:
- pk="" - 解析器抱怨 pk 应该是整数
- pk="-1" 或 "0" - 实际上创建 id/pk = "1" 或 "0" 的记录
- pk="None" 或 None 或 "null" - 解析器抱怨 pk 应该是整数
- 删除“pk”属性 - 解析器抱怨该属性是强制性的
在 Django Serialization 文章中,有一个示例如何使用 null "pk" 从 JSON 反序列化。
# You can easily create new objects by deserializing data with an empty PK
# (It's easier to demo this with JSON...)
>>> new_author_json = '[{"pk": null, "model": "serializers.author", "fields": {"name": "Bill"}}]'
>>> for obj in serializers.deserialize("json", new_author_json):
... obj.save()
(实际上适用于 0.96,但我假设它也适用于 1.*)
所以在 JSON 中 pk 可以为空,但在 XML 中它会抱怨。如何将 XML 的 pk 设置为 null?
谢谢
【问题讨论】:
-
是的,这是 django 中的一个错误,请参阅code.djangoproject.com/ticket/11486
标签: django serialization