gpt4 book ai didi

django - Update_or_create 不会尊重唯一键

转载 作者:行者123 更新时间:2023-12-03 12:25:24 33 4
gpt4 key购买 nike

我在 Django 中使用以下模型:

class sfs_upcs(models.Model):
upc = models.CharField(max_length=14, unique=True)
product_title = models.CharField(max_length=150,default="Not Available")
is_buyable = models.NullBooleanField()
price = models.DecimalField(max_digits=8, decimal_places=2,default="0.00")
image_url = models.URLField(default=None)
breadcrumb = models.TextField(default=None)
product_url = models.URLField(default=None)
timestamp = models.DateTimeField(auto_now=True)

然后我在我的 views.py 上使用以下代码:
def insert_record(upc_dict):
upc = upc_dict['upc']
product_title = upc_dict['product_title']
is_buyable = upc_dict['is_buyable']
price = upc_dict['price']
image_url = upc_dict['image_url']
breadcrumb = upc_dict['breadcrumb']
product_url = upc_dict['product_url']
obj, created = sfs_upcs.objects.update_or_create(
defaults={'product_title':product_title,'is_buyable':is_buyable,
'price':price,'image_url':image_url,'breadcrumb':breadcrumb,'product_url':product_url
},
upc = upc,
product_title = product_title,
is_buyable = is_buyable,
price = price,
image_url = image_url,
breadcrumb = breadcrumb,
product_url = product_url)

print obj,created

我正在使用文档中的 update_or_create 方法 https://docs.djangoproject.com/en/1.8/ref/models/querysets/#update-or-create并说通过将您想要更新的值传入“默认值”字典,以防对象存在应该可以解决问题……但我一直收到“IntegrityError at ... column upc is not unique”...

有任何想法吗?

最佳答案

update_or_create()分为两部分:选择对象的过滤器值,以及实际更新的更新值。关键字过滤要更新的对象,默认值是更新的值。如果过滤器不匹配,则会创建一个新对象。

现在您正在过滤所有这些值,因为它们都作为关键字参数提供:

upc = upc,
product_title = product_title,
is_buyable = is_buyable,
price = price,
image_url = image_url,
breadcrumb = breadcrumb,
product_url = product_url
IntegrityError意味着,即使 upc 的特定值存在,匹配所有这些过滤器的对象不存在。然后 Django 尝试创建对象,但 upc不是唯一的,所以这会导致 IntegrityError .

如果您仅过滤 upc ,该字段永远不会导致 IntegrityError要引发:要么找到并更新现有对象,要么创建新对象,但 upc 的值是独特的。

因此,要解决此问题,只需执行以下操作:
obj, created = sfs_upcs.objects.update_or_create(
# filter on the unique value of `upc`
upc=upc,
# update these fields, or create a new object with these values
defaults={
'product_title': product_title, 'is_buyable': is_buyable, 'price': price,
'image_url': image_url, 'breadcrumb': breadcrumb, 'product_url': product_url,
}
)

关于django - Update_or_create 不会尊重唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31418714/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com