Conjunto de consultas de actualización de Django con anotación
Quiero actualizar todas las filas en el conjunto de consultas utilizando el valor anotado.
Tengo unos modelos simples:
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)
Y quiero evitar este código:
for relation in Relation.objects.annotate(total_rating=Sum('sign_relations__rating')):
relation.rating = relation.total_rating or 0
relation.save()
Y actualizar enuna solicitud SQL usando algo como esto:
Relation.objects.update(rating=Sum('sign_relations__rating'))
No funciona
TypeError: int() argument must be a string or a number, not 'Sum'
o
Relation.objects.annotate(total_rating=Sum('sign_relations__rating')).update(rating=F('total_rating'))
Tampoco funciona:
DatabaseError: missing FROM-clause entry for table "relations_signrelation"
LINE 1: UPDATE "relations_relation" SET "rating" = SUM("relations_si...
¿Es posible usar el ORM de Django para este propósito? No hay información sobre el usoactualizar() yanotar() juntos en docs.