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, верны и отличаются для каждой строки.

enter image description here

Я не могу понять, почему это происходит. Я использую sku в качестве уникального идентификатора для фильтрации, и он установлен как уникальный в моей модели. Что бы я ни делал и как бы ни пытался, дублируются только эти два поля.

Стыдно сказать, но я догадался. Я установил для полей модели целочисленное значение, а целые числа, используемые для двух идентификаторов, были больше, чем может выдержать целочисленное поле. Я поменял их на большие целочисленные поля, и теперь все в порядке!

Вернуться на верх