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

Posted

技术标签:

【中文标题】如何为多对多关系创建 initial_data Json 夹具?【英文标题】:How to create initial_data Json fixture for many-to-many relation? 【发布时间】:2011-09-05 02:01:34 【问题描述】:

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

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

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

因此,例如,如果Model 心情有很多Interests,我将如何在 Json 文件中写下心情 1 的兴趣是兴趣 1、兴趣 2 和兴趣 3。

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

编辑:

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

【问题讨论】:

为了帮助调试,您可以尝试创建 many2many 关系并使用“manage.py dumpdata”查看它在 json 中的样子。 我已经尝试过了,转储然后同步表,但它没有正确创建表并且管理显示崩溃...... 我会说“你的设置有问题”。您得到的答案解决方案;只是,无论出于何种原因,它们都不适合你。 【参考方案1】:

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

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

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

【讨论】:

它并没有告诉我有什么问题,但它仍然不起作用......数据库中实际上没有选择想要的兴趣 在夹具中的情绪之前是否加载了兴趣? 它们在Json文件中的moods之前,只要是自上而下的,就会在moods之前加上interests... 我不确定。这绝对是加载夹具的方式,所以问题可能出在其他地方 @pastylegs 这似乎只适用于包含 1 pk 的列表。【参考方案2】:

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

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

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

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

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

【讨论】:

这如何回答这个问题? 因为更容易通过管理界面添加数据,然后查看它是如何被转储出来以用作示例。

以上是关于如何为多对多关系创建 initial_data Json 夹具?的主要内容,如果未能解决你的问题,请参考以下文章

如何为连接表中的其他属性创建多对多 Hibernate 映射?

如何为 CoreData 多对多关系编写 NSPredicate

如何为fuelphp ORM关系设置动态条件

如何为包含 on-delete 级联的 ManyToMany 关系创建 Django 迁移?

如何处理淘汰视图模型中的多对多关系

如何处理mongodb中的多对多关系