【问题标题】:Django loaddata ignore existing objectsDjango loaddata 忽略现有对象
【发布时间】:2019-05-11 05:14:36
【问题描述】:

我有一个带有条目列表的夹具。例如:

[
  {
    "fields": {
      "currency": 1,
      "price": "99.99",
      "product_variant": 1
    },
    "model": "products.productprice",
    "pk": 1
  },
  {
    "fields": {
      "currency": 2,
      "price": "139.99",
      "product_variant": 1
    },
    "model": "products.productprice",
    "pk": 2
  }
]

这只是每个条目的初始数据(价格可能会发生变化)。我希望能够向该夹具添加另一个条目并使用loaddata 加载它,但不更新数据库中已经存在的条目。

有没有办法做到这一点? --ignorenonexistent 之类的东西,但用于现有条目。

【问题讨论】:

    标签: python django django-fixtures loaddata


    【解决方案1】:

    如果你像这样在 json 中保留 pk,你总是会覆盖 product.productprice 中的前两条记录。

    我会使用“pk: null”。 这样,您将始终在每次加载时创建新记录。

    所以如果你想创建一个新的价格:

    [
      {
        "fields": {
          "currency": 1,
          "price": "99.99",
          "product_variant": 1
        },
        "model": "products.productprice",
        "pk": 1
      },
      {
        "fields": {
          "currency": 2,
          "price": "139.99",
          "product_variant": 1
        },
        "model": "products.productprice",
        "pk": 2
      },
      {
        "fields": {
          "currency": 4,
          "price": "9.99",
          "product_variant": 1
        },
        "model": "products.productprice",
        "pk": null
      }
    ]
    

    前两条记录总是相同的,但如果您已经在最后一部分添加了第三条记录 (pk:3),您将使用 pk:4 创建一个新的 productprice。

    顺便说一句:如果你的 currency 字段是另一个主键(带自动增量),你也可以在其中输入“null”,将生成一个新的主键。

    【讨论】:

      猜你喜欢
      • 2014-07-10
      • 2016-05-24
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      相关资源
      最近更新 更多