您好我有来自API的实时数据,因为我们拥有相同的SKU,在多个市场中,我需要一个复合PK,(SKU,国家), 我知道Django不支持这个,所以我使用的是update_or_create函数。
我的问题是数据值随着数量值的变化而不断重复
country merch quantity sku
USA CC 2807 1005 B00VQVPRH8
USA CC 2806 1004 B00VQVPRH8
以下是保存数据的调用:
obj, created = FBAInventory.objects.update_or_create(
Account=merchant["company"],
ASIN=ASIN,
TotalSupplyQuantity=TotalSupplyQuantity,
InStockSupplyQuantity=InStockSupplyQuantity,
FNSKU=FNSKU,
EarliestAvailability=EarliestAvailability,
defaults={'SellerSKU': SellerSKU, 'Country': merchant["country"]},
)
我是否错误地使用了该功能,我想更新SKU / Country行,我不希望重复使用不同的数量值。我知道我可以使用get,但我想利用这个函数,所以我不必编写条件语句。默认值是否包含更新值,而kwarg是否保持值匹配?
答案:
obj, created = FBAInventory.objects.update_or_create(
Account=merchant["company"],
ASIN=ASIN,
FNSKU=FNSKU,
defaults={'SellerSKU': SellerSKU, 'Country': merchant["country"],
'TotalSupplyQuantity':TotalSupplyQuantity,'InStockSupplyQuantity':InStockSupplyQuantity, 'EarliestAvailability':EarliestAvailability }
)
根据MrName建议
答案 0 :(得分:1)
我相信所有提供的关键字参数都会创建匹配条件。由于您将数量作为关键字参数传递,因此该方法正在查找具有该数量的现有记录,而不是查找它,因此会创建副本。
如果将数量参数移动到defaults
,您的代码应该根据所需的搜索条件(例如帐户)成功找到现有记录,然后更新数量。