如何为多对多关系创建initial_data Json fixture?

时间:2011-05-30 22:05:16

标签: database django json django-models many-to-many

我正在为我的django项目数据库创建一个初始化文件。我正在使用我创建的名为initial_data.json的文件执行此操作。例如,以下代码(运行syncdb时)在模型Word中创建一个新行name="apple"

[ { "model": "sites.word", "pk": 1, "fields": { "name": "apple" } } ]

到目前为止,我已经为几个模型设法了,问题在于具有多对多字段的模型。我已经四处寻找正确的方法来做到这一点并且空洞。

因此,例如,如果Model情绪有很多Interests,我将如何在Json文件中写入情绪-1的兴趣是兴趣-1,兴趣-2和兴趣-3。 / p>

在Json中编写多对多关系模型的正确方法是什么?

编辑:

@pastylegs解决方案是正确的,我只是遇到麻烦,因为我的兴趣编号在Json文件中已经关闭,因此无法与那些情绪相匹配。

2 个答案:

答案 0 :(得分:14)

我很确定你的模型的多个字段可以写成一个简单的列表:

 [
    { 
        "model": "sites.word", 
        "pk": 1,
        "fields": { 
            "name": "apple",
            "my_m2m_field_name": [1,2,3],
        }
     }
]

其中1,2,3是关系的主键

答案 1 :(得分:5)

我喜欢做的是使用dumpdata command。我启动一个测试站点,使用管理表单或应用程序本身添加我想要在我的夹具中使用的数据,然后我运行

./manage.py dumpdata appname > appname/fixtures/initial_data.json

如果您省略appname,可以将所有应用程序一起转储,但我喜欢为每个模型单独执行此操作。

如果您使用的是1.3(我还没有),那么您可以使用--exclude来转储某些部分。我已经看到有一个--indent选项可以使输出很漂亮(现在只是在回答你的问题时发现)。

这是文档中很容易遗漏的内容之一。 ; - )