Ich möchte alle Zeilen in Abfragegruppe aktualisieren, indem Sie einen annotierten Wert verwenden.Django-Aktualisierungsabfragegruppe mit Anmerkung
Ich habe eine einfache Modelle:
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)
Und ich möchte diesen Code awoid:
for relation in Relation.objects.annotate(total_rating=Sum('sign_relations__rating')):
relation.rating = relation.total_rating or 0
relation.save()
Und aktualisiere in eine SQL-Anfrage durch so etwas wie dies mit:
Relation.objects.update(rating=Sum('sign_relations__rating'))
Funktioniert nicht:
TypeError: int() argument must be a string or a number, not 'Sum'
oder
Relation.objects.annotate(total_rating=Sum('sign_relations__rating')).update(rating=F('total_rating'))
auch nicht funktioniert:
DatabaseError: missing FROM-clause entry for table "relations_signrelation"
LINE 1: UPDATE "relations_relation" SET "rating" = SUM("relations_si...
Ist es möglich, Django ORM für diesen Zweck zu benutzen? Es gibt keine Informationen über die Verwendung von update() und annotieren() zusammen in docs.
ich dies sogar möglich, in reiner SQL nicht sicher bin? Wenn ich ein UPDATE in SQL mache, glaube ich nicht, dass es möglich ist, anderen Tabellen beizutreten. – user27478
Ja, es ist möglich - über Unterabfragen, z. UPDATE t1 SET a = (SELECT SUM (c) von t2 mit t2.b = t1.b) '; –
Was versuchst du wirklich? Versuchen Sie, alle Werte der Spalte "Bewertung" in der Tabelle "SigningRelation" zusammenzufassen und dann als neue Zeile in der Tabelle "Relation" zu speichern? – phourxx