如何在Python,Django中获得评论某些帖子的用户查询集?

时间:2018-01-29 10:54:47

标签: python django django-queryset

我想获得一个在某些帖子中评论过的用户查询集。 假设有一个帖子(id = 3),有8个人评论过它。 我想通知8个人,所以我想得到8个人的查询集(用户对象)。 我该怎么办?

我有模型用户,帖子和评论。

例如,

User.objects.get(comment__Post.objects.filter(id='3'))
像这样。 (当然,鞋面不起作用)

帮助我!

用户模型是Django用户模型。

class Post(models.Model):
    post_id = models.CharField('username', max_length=150)
    ...

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    com_id = models.CharField('username', max_length=150)
    ....

2 个答案:

答案 0 :(得分:1)

在我看来,您应该向模型OneToOneField和与Comment模型相关的模型Post添加User,如下所示:

from django.conf import settings
...
class Post(models.Model):
    ...
    user = models.OneToOneField(settings.User, related_name="posts")
    ...

class Comment(models.Model):
    ...
    user = models.OneToOneField(settings.User, related_name"comments")
    post = models.ForeignKey(Post, related_name="post_comments")
    ...

您可以执行的查询集:

User.objects.get(posts__id=3)
for comments in Comment.objects.get(post_comments__id=3):
    comments.user # this are the user that commented on a certain post.

答案 1 :(得分:1)

理想情况下,您的模型应如下所示

class Post(models.Model):
    posted_by = models.ForeignKey(User, on_delete=models.CASCADE)
    ...

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    comment = models.CharField(max_length=100)
    commented_by = models.ForeignKey(User, on_delete=models.CASCADE)

您的要求可以通过以下查询来实现

post = Post.objects.get(id=3)
user_ids = list(Comment.objects.filter(post=post).values_list('user__id', flat=True))

这将返回用户ID列表

如果您需要查询集,

users = User.objects.filter(id__in=user_ids)