get_by_natural_key和natural_key的区别
我理解的是,模型管理器里的 get_by_natural_key 方法是在反序列化时使用的,而 natural_key 则是在序列化时用的。这样说对吗?如果不对,那它们之间有什么区别呢?
另外,我们是不是每次都需要提供 --natural-foreign 和 --natural-primary 这两个选项?有没有办法强制使用自然键来进行序列化和反序列化呢?
1 个回答
5
正如你所说,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
参数。如果不加的话,它们会按照默认的(非自然)方式进行序列化或反序列化。
如果你想在 dumpdata
中“强制”使用自然键,可以创建一个 shell 别名。
如果你需要更高级的模型序列化和反序列化,我建议你使用像 Django REST Framework serializers 这样的外部组件,或者自己写一个。