Есть модели:
class answer(models.Model):
name = models.CharFIeld("Name", max_length=10)
class message(models.Model):
message = models.CharField("Message", max_length=50)
look = models.BooleanField(default=False)
answer = models.ForeignKey(answer)
А нужно мне получить набор queryset 'answer' и прикрепить к каждому объекту два атрибута типа Boolean содержания: Если есть
message(look=False, answer=(к текущему объекту итерции answer)) то True Иначе False
И кол-во связанных messages к каждому answer
Костылями так делается( допустим будущее поле называется look_bool, new_bool):
for item in answer.objects.all(): # filter(...)
messages_ = message.objects.filter(answer=item)
if messages_ .count():
item.look_bool= True
else:
item.look_bool= False
if messages_ .filter(view=False).count():
item.new_bool= True
else:
item.new_bool= False
А как сделать правильно без кучи запросов? Может есть какое элегантрое решение, или скажите куда курить. Про кучу запросов, я имею ввиду(потому что для каждого объекта answer делает полноценный запрос)
messages_ = message.objects.filter(answer=item)
P.S. Может я не так смотрю на задачу. Требуется для дальнейшей передачи в шаблон набора(
django.views.generic.ListView
), и там при True отображать доп поле у answer.
Нашел доку, но не разобрался до конца.
https://docs.djangoproject.com/en/dev/topics/db/ag...
ВОт пример моего кода: который работает не так как я хочу:
answ = answer.objects.all() # filter(...)
answ.annotate(
count_message=Count('message')
).annotate(
new_message=Count('message')
).filter(
message__look=False
)