我按照这里的说明创建我的第一个Django fixture。我创建了一个JSON文件。但有一个复杂的问题:我试图填充的模型继承了MPTTModel
以下是我的Django JSON固定文件initial_data.json
的样子:
[
{
"model": "MyApp.MyModel",
"pk": 1,
"fields": {
"level": 0,
"parent": null,
"name": "My String"
}
}
]
当我运行这个夹具时,我会得到如下所示的错误。事实证明,该模型的fixture中还必须定义一些其他字段:rght
、lft
、tree_id
、level
。
django.db.utils.IntegrityError: Problem installing fixture
'MyApp/fixtures/initial_data.json': Could not load MyApp.MyModel(pk=1):
null value in column "lft" violates not-null constraint
Failing row contains (1, My String, null, , null, null, null, 0).
我可以计算出level
属性应该是什么,并将其插入到fixture文件中。但是我应该如何计算和设置这个夹具中rght
、lft
、tree_id
的值呢?
您是如何手动创建夹具的?使用dumpdata命令应该可以清楚地看到所需的结构,下面是一个mptt继承模型json转储的例子:
$ ./manage.py dumpdata cms.Page --natural --indent=4
[
{
"pk": 46,
"model": "cms.page",
"fields": {
"rght": 43,
"navigation_extenders": "",
"site": 1,
"creation_date": "2014-05-31T12:07:12Z",
"lft": 42,
"in_navigation": false,
"reverse_id": null,
"login_required": false,
"created_by": "hedde",
"publication_end_date": null,
"template": "cms/page.html",
"tree_id": 2,
"placeholders": [
159,
160
],
"changed_date": "2014-06-25T09:33:50Z",
"limit_visibility_in_menu": null,
"parent": 2,
"publisher_state": 0,
"soft_root": false,
"publication_date": "2014-05-31T12:07:07Z",
"publisher_public": 45,
"level": 1,
"changed_by": "hedde",
"publisher_is_draft": false,
"published": true
}
}
]