Django loaddata 忽略现有对象

Qub*_*uba 10 python django loaddata django-fixtures

我有一个带有条目列表的装置。例如:

[
  {
    "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
  }
]
Run Code Online (Sandbox Code Playgroud)

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

有没有办法做到这一点?类似于--ignorenonexistent但对于现有条目。

小智 1

如果像这样将 pk 保留在 json 中,则始终会覆盖 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
  }
]
Run Code Online (Sandbox Code Playgroud)

前两条记录始终相同,但如果您已经在最后一部分中添加了第三条记录 ( pk:3 ),您将创建一个带有 pk: 4 的新产品价格。

顺便说一句:如果您的货币字段是其他主键(具有自动增量),您也可以在那里输入“null”,将会生成一个新的主键。