据我了解,模型管理器的 get_by_natural_key 用于反序列化,而 natural_key 用于序列化。这是真的 ?如果不是,有什么区别?
而且,我们是否需要始终提供 --natural-foreign 和 --natural-primary 键?有没有办法通过自然键强制序列化/反序列化?
据我了解,模型管理器的 get_by_natural_key 用于反序列化,而 natural_key 用于序列化。这是真的 ?如果不是,有什么区别?
而且,我们是否需要始终提供 --natural-foreign 和 --natural-primary 键?有没有办法通过自然键强制序列化/反序列化?
正如您所说,Djangoget_by_natural_key
用于反序列化和natural_key
序列化。
如文档中所述,您不需要同时定义它们。您只能安全地使用其中之一。
如果您需要使用代码中的自然键序列化模型,则必须使用serializers.serialize()
withuse_natural_foreign_keys=True
和/或use_natural_primary_keys=True
.
如果您需要使用自然键序列化/反序列化某些对象,admin.py dumpdata
那么您必须传递--natural-foreign
和/或--natural-primary
如果您不这样做,它们将使用默认(非自然)行为进行序列化/反序列化。
要“强制”自然键,dumpdata
您可以创建一个 shell 别名。
如果您需要更高级的模型序列化/反序列化,我建议您使用外部组件,如Django REST Framework 序列化程序或编写自己的。