У меня есть следующие модели:
from django.db import models
class Feed(models.Model):
readers = models.ManyToManyField('auth.user')
# other fields
class Entry(models.Model):
feed = models.ForeignKey(Feed)
read_by = models.ManyToManyField('auth.user')
# other fields
В экземпляре Feed
все читатели в наборе readers
.Если User
читает Entry
, User
добавляется к набору read_by
.
Теперь я столкнулся со следующей проблемой: Как я могу получить для одного User
число непрочитанных Entries
для каждого Feed
чтения User
?
Исходя из Feed
, следующее утверждение исключило меня из всех Feeds
с прочтением Entries
для данного User
:
Feed.objects.filter(readers=user).values('public_id').annotate(models.Count('entry')).exclude(entry__read_by=user)
Исходя из другой стороны Entry
, следующий оператор не группирует Feeds
и счетчик вместе:
Entry.objects.exclude(read_by=user).filter(feed__readers=user).values('feed').annotate(models.Count('id'))
Редактировать:
Меня попросили предоставить пример данных.Итак, подумайте о следующей настройке:
User
U читает три Feeds
: FeedOne, FeedTwo, FeedThree.
Для каждого Feed
в настоящее время в базе данных имеется пять Entries
.Два Entries
из FeedOne уже прочитаны User
U.
Резюме:
FeedOne
EntryA (read by U)
EntryB (read by U)
EntryC
EntryD
EntryE
FeedTwo
EntryF
EntryG
EntryH
EntryI
EntryJ
FeedThree
EntryK
EntryL
EntryM
EntryN
EntryO
Мне нужен счетчик непрочитанных Entries
для каждого Feed
изэто User
:
FeedOne: 3
FeedTwo: 5
FeedThree: 5