【问题标题】:How to create initial_data Json fixture for many-to-many relation?如何为多对多关系创建 initial_data Json 夹具?
【发布时间】: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 中的样子。
  • 我已经尝试过了,转储然后同步表,但它没有正确创建表并且管理显示崩溃......
  • 我会说“你的设置有问题”。您得到的答案解决方案;只是,无论出于何种原因,它们都不适合你。

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


【解决方案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 选项可以使输出变得漂亮(现在在回答您的问题时发现)。

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

【讨论】:

  • 这如何回答这个问题?
  • 因为更容易通过管理界面添加数据,然后查看它是如何被转储出来以用作示例。
猜你喜欢
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2020-09-10
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多