Tôi đang sử dụng mô hình sau đây trong Django:Update_or_create sẽ không tôn trọng độc đáo chính
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)
Và sau đó tôi đang sử dụng đoạn mã sau vào views.py tôi:
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
Tôi bằng cách sử dụng phương thức update_or_create có trong tài liệu https://docs.djangoproject.com/en/1.8/ref/models/querysets/#update-or-create và nói rằng bằng cách chuyển sang từ điển 'mặc định' các giá trị mà bạn muốn UPDATE trong trường hợp đối tượng tồn tại sẽ làm cho thủ thuật ... nhưng tôi tiếp tục nhận được một "IntegrityError tại ... cột upc không phải là duy nhất "...
Bất kỳ ý tưởng nào?
Cho tham số ID. – Gocht
Ý của bạn là gì? Khóa chính? Nhưng, điều đó sẽ làm việc một mình, cứng nhắc? – villancikos
Với 'update_or_create' bạn cần tiêu chí lọc, bạn cung cấp cho các trường cập nhật và các giá trị tiêu chí. Tiêu chí lọc tốt nhất là PK. – Gocht