Tôi muốn cập nhật tất cả các hàng trong queryset bằng cách sử dụng giá trị chú thích.Truy vấn cập nhật Django với chú thích
Tôi có một mô hình đơn giản:
class Relation(models.Model):
rating = models.IntegerField(default=0)
class SignRelation(models.Model):
relation = models.ForeignKey(Relation, related_name='sign_relations')
rating = models.IntegerField(default=0)
Và tôi muốn awoid mã này:
for relation in Relation.objects.annotate(total_rating=Sum('sign_relations__rating')):
relation.rating = relation.total_rating or 0
relation.save()
Và làm cập nhật trong một SQL-yêu cầu bằng cách sử dụng một cái gì đó như thế này:
Relation.objects.update(rating=Sum('sign_relations__rating'))
Không hoạt động:
TypeError: int() argument must be a string or a number, not 'Sum'
hoặc
Relation.objects.annotate(total_rating=Sum('sign_relations__rating')).update(rating=F('total_rating'))
Cũng không hoạt động:
DatabaseError: missing FROM-clause entry for table "relations_signrelation"
LINE 1: UPDATE "relations_relation" SET "rating" = SUM("relations_si...
Có thể sử dụng ORM Django cho mục đích này? Không có thông tin về việc sử dụng cập nhật() và chú thích() cùng nhau trong tài liệu.
Tôi không chắc chắn điều này thậm chí có thể trong SQL tinh khiết? Khi thực hiện một UPDATE trong SQL, tôi không nghĩ rằng nó có thể tham gia các bảng khác. – user27478
Có, có thể - thông qua các truy vấn phụ, ví dụ. 'UPDATE t1 SET a = (SELECT SUM (c) từ t2 trong đó t2.b = t1.b)'; –
Bạn đang thực sự cố gắng làm gì? Bạn đang cố tổng hợp tất cả các giá trị của cột 'xếp hạng' trên bảng 'SigningRelation' và sau đó lưu nó dưới dạng hàng mới trên bảng 'Quan hệ'? – phourxx