Python Django:为用户检索所有未看到的帖子
我有一个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)
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对象?你不能用排除而不是过滤来实现吗?