如何在创建Django fixture时填充继承的MPTT字段



我按照这里的说明创建我的第一个Django fixture。我创建了一个JSON文件。但有一个复杂的问题:我试图填充的模型继承了MPTTModel

以下是我的Django JSON固定文件initial_data.json的样子:

[
    {
         "model": "MyApp.MyModel", 
         "pk": 1, 
         "fields": {
             "level": 0, 
             "parent": null, 
             "name": "My String"
         }
    }
]

当我运行这个夹具时,我会得到如下所示的错误。事实证明,该模型的fixture中还必须定义一些其他字段:rghtlfttree_idlevel

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文件中。但是我应该如何计算和设置这个夹具中rghtlfttree_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
        }
    }
]

最新更新