get_by_natural_key和natural_key之间的区别

时间:2014-07-17 17:33:56

标签: django python-2.7 django-models natural-key

据我所知,模型管理器的get_by_natural_key用于反序列化,而natural_key用于序列化。这是真的 ?如果不是,有什么区别?

而且,我们是否需要始终提供 - 自然 - 外国和 - 自然 - 主键?有没有办法强制通过自然键序列化/反序列化?

1 个答案:

答案 0 :(得分:3)

正如您所说,Django使用get_by_natural_key进行反序列化,使用natural_key进行序列化。

如文档中所述,您不需要定义它们。你可以安全地只使用其中一个。

如果您需要使用代码中的自然键序列化模型,则必须使用serializers.serialize()use_natural_foreign_keys=True和/或use_natural_primary_keys=True

如果您需要使用自然键和admin.py dumpdata序列化/反序列化某些对象,那么您必须通过--natural-foreign和/或--natural-primary,否则它们将被序列化/使用默认(非自然)行为进行反序列化。

To" force" dumpdata中的自然键可以创建shell别名。

如果您需要更高级的模型序列化/反序列化,我建议您使用Django REST Framework serializers之类的外部组件或编写自己的组件。