Django update_or_create внутри цикла дублирует значения полей, но только пары полей
Прошло некоторое время, но у меня возникла несколько озадачивающая проблема. Я перебираю некоторые данные, получаемые из api, и выполняю вызов update_or_create через django.
for product in response['products']:
for variant in product['variants']:
print(variant['product_id'])
obj, created = Product.objects.update_or_create(
sku=variant['sku'],
defaults={
'name': product['title'],
'price': variant['price'],
'sku': variant['sku'],
'shopify_product_id': variant['product_id'],
'shopify_variant_id': variant['id'],
'weight_grams': variant['grams'],
},
)
Во время цикла вы заметите, что я печатаю значение идентификатора продукта-варианта.
print(variant['product_id'])
В консоли я вижу, что результаты печати корректны с различными идентификаторами товаров-вариантов.
7396903682207
7405275381919
7405275775135
7405273579679
7405278101663
7396921475231
9034125279391
Но в базе данных и variant['product_id']
, и variant['id']
одинаковы для каждой строки. При этом другие данные, такие как name и price, верны и отличаются для каждой строки.
Я не могу понять, почему это происходит. Я использую sku в качестве уникального идентификатора для фильтрации, и он установлен как уникальный в моей модели. Что бы я ни делал и как бы ни пытался, дублируются только эти два поля.
Стыдно сказать, но я догадался. Я установил для полей модели целочисленное значение, а целые числа, используемые для двух идентификаторов, были больше, чем может выдержать целочисленное поле. Я поменял их на большие целочисленные поля, и теперь все в порядке!