Açıklamalı değer kullanarak queryset'deki tüm satırları güncellemek istiyorum. Django açıklama notuyla birlikte queryset
ben basit modelleri var: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)
Ve bu kodu awoid istiyorum:
for relation in Relation.objects.annotate(total_rating=Sum('sign_relations__rating')):
relation.rating = relation.total_rating or 0
relation.save()
Ve böyle bir şey kullanarak bir SQL istek yılında güncelleştirme yapın:
Relation.objects.update(rating=Sum('sign_relations__rating'))
Çalışmıyor:
TypeError: int() argument must be a string or a number, not 'Sum'
veya
Relation.objects.annotate(total_rating=Sum('sign_relations__rating')).update(rating=F('total_rating'))
Ayrıca çalışmaz:
DatabaseError: missing FROM-clause entry for table "relations_signrelation"
LINE 1: UPDATE "relations_relation" SET "rating" = SUM("relations_si...
bu amaçla Django'nın ORM kullanmak mümkün mü? update() ve annotate() belgelerinde birlikte kullanma hakkında bilgi yoktur.
? SQL'de bir UPDATE yaparken, diğer tablolara katılmanın mümkün olduğunu düşünmüyorum. – user27478
Evet, mümkün - alt sorgularla, örn. UPDATE t1 SET a = (SELECT SUM (c) t2'den t2.b'ye = t1.b) '; –
Gerçekten ne yapmaya çalışıyorsunuz? 'SigningRelation' tablosundaki 'rating' sütununun tüm değerlerini toplamaya ve sonra 'Relation' tablosunda yeni bir satır olarak kaydetmeye mi çalışıyorsunuz? – phourxx