如何为多对多关系创建 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