मैं एनोटेटेड मान का उपयोग कर क्वेरीसेट में सभी पंक्तियों को अपडेट करना चाहता हूं।एनोटेशन के साथ 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()
और कुछ इस तरह का उपयोग करके एक एसक्यूएल-अनुरोध में अद्यतन करें:
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 उपयोग करने के लिए? अपडेट() और एनोटेट() दस्तावेज़ों में एक साथ उपयोग करने के बारे में कोई जानकारी नहीं है।
मैं शुद्ध एसक्यूएल में यकीन है कि यह भी संभव नहीं कर रहा हूँ? एसक्यूएल में अद्यतन करते समय, मुझे नहीं लगता कि अन्य तालिकाओं में शामिल होना संभव है। – user27478
हां, यह संभव है - subqueries के माध्यम से, पूर्व। 'अद्यतन टी 1 सेट एक = (टी 2 से चयन एसयूएम (सी) जहां t2.b = t1.b)'; –
आप वास्तव में क्या करने की कोशिश कर रहे हैं? क्या आप 'साइनिंगरेलेशन' तालिका पर कॉलम 'रेटिंग' के सभी मानों को जोड़ना चाहते हैं और फिर इसे 'रिलेशन' टेबल पर एक नई पंक्ति के रूप में सहेज सकते हैं? – phourxx