【发布时间】:2012-02-23 21:52:53
【问题描述】:
我有这些模型:
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 集合中。
现在我遇到了以下问题:对于每个Feed 和User 读取,我如何获得一个User 的未读Entries 计数?
来自Feed 方面,以下语句将我排除在所有Feeds 之外,并针对给定的User 读取Entries:
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'))
编辑:
我被要求提供示例数据。因此,请考虑以下设置:
UserU 读取三个Feeds:FeedOne、FeedTwo、FeedThree。
对于每个Feed,数据库中当前有五个Entries。 FeedOne 的两个Entries 已被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
我需要的是这个User中每个Feed的未读Entries计数:
FeedOne: 3
FeedTwo: 5
FeedThree: 5
【问题讨论】:
-
你能发布示例数据和预期的查询结果吗?我认为这会让你的问题更容易理解
标签: django django-models many-to-many