据我所知,模型管理器的get_by_natural_key用于反序列化,而natural_key用于序列化。这是真的 ?如果不是,有什么区别?
而且,我们是否需要始终提供 - 自然 - 外国和 - 自然 - 主键?有没有办法强制通过自然键序列化/反序列化?
答案 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之类的外部组件或编写自己的组件。