我想通過使用帶註釋的值來更新queryset中的所有行。帶有註釋的Django更新查詢集
我有一個簡單的模型:
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)
我想awoid此代碼:
for relation in Relation.objects.annotate(total_rating=Sum('sign_relations__rating')):
relation.rating = relation.total_rating or 0
relation.save()
,並通過使用像這樣做一個SQL請求更新:
Relation.objects.update(rating=Sum('sign_relations__rating'))
不工作:
TypeError: int() argument must be a string or a number, not 'Sum'
或
Relation.objects.annotate(total_rating=Sum('sign_relations__rating')).update(rating=F('total_rating'))
也不起作用:
DatabaseError: missing FROM-clause entry for table "relations_signrelation"
LINE 1: UPDATE "relations_relation" SET "rating" = SUM("relations_si...
是否有可能使用Django的ORM爲了這個目的?沒有關於在文檔中使用更新()和批註()的信息。
我不是純粹的SQL肯定這甚至可能嗎?在SQL中執行UPDATE時,我認爲不可能加入其他表。 – user27478 2010-12-08 13:56:57
是的,這是可能的 - 通過子查詢,例如。 'UPDATE t1 SET a =(從t2.S選擇SUM(c),其中t2.b = t1.b)'; – 2015-02-20 15:03:50
你真的想做什麼? 您是否試圖總結'SigningRelation'表中列'評級'的所有值,然後將其保存爲「關係」表上的新行? – phourxx 2015-12-09 20:19:02