我想获得一个在某些帖子中评论过的用户查询集。 假设有一个帖子(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)
....
答案 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)