Python Django:为用户检索所有未看到的帖子

Python Django:为用户检索所有未看到的帖子,python,django,django-models,Python,Django,Django Models,我有一个Django数据模型,如下所示: class Post(django.db.models.Model): text = django.db.models.CharField() class Seen(django.db.models.Model): post = django.db.models.ForeignKey(Post) user = django.db.models.ForeignKey(django.contrib.auth.models.User)

我有一个Django数据模型,如下所示:

class Post(django.db.models.Model):
    text = django.db.models.CharField()

class Seen(django.db.models.Model):
    post = django.db.models.ForeignKey(Post)
    user = django.db.models.ForeignKey(django.contrib.auth.models.User)

我试图跟踪帖子的位置,以及哪些用户看到了哪些帖子。如何检索给定用户未看到的所有帖子?

考虑以下几点:

seen = Seen.objects.select_related('post').filter(user=request.user)
if post not in [x.post for x in seen]:
    #do what you need
请注意,这只是一个性能助推器。

使用排除:

unseen_posts = Post.objects.exclude(seen__user=user)
其中,
user
是一个
django.contrib.auth.models.user
对象,如果您使用的是中间件,则可能是
request.user


seen\uu user
字符串沿着
forignKey
Post
seen
之间向后遍历,然后沿着
foreignKey
seen
user

之间向前遍历,这不会仅仅返回其他用户看到的帖子,或者什么都没有?不要认为需要
select\u related
,因为您没有访问
Post
的任何属性。此外,要获取所有帖子,您只需在列表上执行排除即可
Post.objects.exclude(pk\uu-in=[x.Post-for-x-in-seen])
为什么使用Q对象?你不能用排除而不是过滤来实现吗?