update_or_create Django 1.10

时间:2017-10-24 19:27:09

标签: python django updates

您好我有来自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建议

1 个答案:

答案 0 :(得分:1)

我相信所有提供的关键字参数都会创建匹配条件。由于您将数量作为关键字参数传递,因此该方法正在查找具有该数量的现有记录,而不是查找它,因此会创建副本。

如果将数量参数移动到defaults,您的代码应该根据所需的搜索条件(例如帐户)成功找到现有记录,然后更新数量。