Я хочу обновить все строки в наборе запросов, используя аннотированное значение.
У меня есть простые модели:
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)
И я хочу избежать этого кода:
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...
Можно ли использовать для этого ORM Джанго? Нет информации об использовании update () и annotate () вместе в документах.