我正在尝试./manage.py dumpdata --natural-foreign --natural-primary
我的课程,这些课程是:
class SuperClassManager(Manager):
def get_by_natural_key(self, identifier):
return self.get(identifier=identifier)
class SuperClass(Model):
objects = SuperClassManager()
identifier = CharField(max_length=31, unique=True)
def natural_key(self):
return (self.identifier, )
class Class(SuperClass):
pass
但转储的数据是:
[
{
"model": "app.superclass",
"fields": {
"identifier": "identifier"
}
},
{
"model": "app.class",
"fields": {}
}
]
在这种情况下,无法将Class
实例与SuperClass
实例相关联。我错过了什么?为什么superclass_ptr
中存在的Class
(指向SuperClass
)被序列化,以便可以关联实例?
问题是:我的超类有多个子类,每个子类有很多实例。所以我需要这种关系,所以我的灯具才有意义。
答案 0 :(得分:2)
这实际上是一个错误,补丁正在建设中:https://github.com/django/django/pull/7231。所以,除了等待补丁之外,没有任何答案适合这个问题。
答案 1 :(得分:0)
您必须从您的超类和您希望拥有的所有子类转储数据,并且要加载所有内容,首先加载超类,然后加载子类。
Django会自动为您做继承链接,因此您不必担心(您将看到超类和子类共享相同的pk
)。
以下是一个例子:
# To export the data
$ python manage.py dumpdata app.Superclass > superclass.json
$ python manage.py dumpdata app.SubclassA app.SubclassB > subclasses.json
# To import the data
$ python manage.py loaddata superclass.json
$ python manage.py loaddata subclasses.json