Проблема
Причина, по которой это не удается, заключается в том, что здесь object
- это QuerySet
из News_Channel
с, да, QuerySet
может содержать ровно один News_Channel
, но это не имеет значения.
Если вы затем используете object[0]
, вы делаете запрос в базу данных, чтобы получить первый элемент и десериализовать его в объект News_Channel
.Затем вы устанавливаете total_star
этого объекта, но вы никогда не сохраняете этот объект.Вы набираете .update()
только для всего набора запросов, что приводит к другому независимому запросу.
Это можно исправить с помощью:
objects = News_Channel.objects.filter(id=i)
<b>object = objects[0]</b>
object.total_star = total_rate
object<b>.save()</b>
Или, если вам не нужна проверка, вы можете повысить производительность с помощью:
News_Channel.objects.filter(id=i).update(total_star=total_rate)
Обновление все News_Channel
с
Если вы хотите обновить все News_Channel
с, вам на самом деле лучше использовать Subquery
здесь:
from django.db.models import OuterRef, Sum, Subquery
subq = Subquery(
Count.objects.filter(
channelId=OuterRef('id')
).annotate(
total_rate=Sum('rate')
).order_by('channelId').values('total_rate')[:1]
)
News_Channel.objects.update(total_star=subq)