Có Django ORM thực hành tốt nhất cho SQL này:Django tương đương với SQL REPLACE
REPLACE app_model SET field_1 = 'some val', field_2 = 'some val';
Assumption: field_1 hoặc field_2 sẽ có một khóa duy nhất trên chúng (hoặc trong trường hợp của tôi trên cả hai), nếu không này sẽ luôn luôn đánh giá một INSERT.
Edit:
câu trả lời cá nhân tốt nhất của tôi ngay bây giờ là thế này, nhưng đó là 2-3 truy vấn mà 1 ta có thể:
from django.core.exceptions import ValidationError
try:
Model(field_1='some val',field_2='some val').validate_unique()
Model(field_1='some val',field_2='some val',extra_field='some val').save()
except ValidationError:
Model.objects.filter(field_1='some val',field_2='some val').update(extra_field='some val')
lol 'get_or_create() 'trả về một tuple' (đối tượng, được tạo ra) '. Tôi đã mắc sai lầm tương tự hàng chục lần trước đó. Hàm này thực sự nên được đổi tên thành 'get_a_tuple_or_create()' – est
Bắt tốt, @est. Đã sửa. – eternicode