首页 > 解决方案 > Django loaddata 忽略现有对象

问题描述

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

[
  {
    "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但对于现有条目。

标签: pythondjangodjango-fixturesloaddata

解决方案


如果像这样在 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。

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


推荐阅读