Django 如何得到我所有的饲料排除这是我的评论
有三节课Django 如何得到我所有的饲料排除这是我的评论,django,django-orm,Django,Django Orm,有三节课 class User(models.Model): name = models.CharField() class Feed(models.Model): user = models.ForeignKey(User) class Comment(models.Model): user = models.ForeignKey(User) feed = models.ForeignKey(Feed) 如果我指定了一个名为Jack的用户,那么如何获取Jack的提要和评论
class User(models.Model):
name = models.CharField()
class Feed(models.Model):
user = models.ForeignKey(User)
class Comment(models.Model):
user = models.ForeignKey(User)
feed = models.ForeignKey(Feed)
如果我指定了一个名为Jack的用户,那么如何获取Jack的提要和评论,而不获取评论用户(如果不是Jack)的评论
如果有两个插孔馈电:
[
"feed1": [{"comment1": {"user": "Lily"}}, {"comment2": {"user": "Bruce"}],
"feed2": [{"comment1": {"user": "Jack"}}, {"comment2": {"user":"Lily"}],
]
我使用以下代码获得:
Feed.objects.filter(user__name="Jack").exclude(comment__user__name="Jack")
我想得到结果:
[
"feed1": [{"comment1": {"user": "Lily"}}, {"comment2": {"user": "Bruce"}],
"feed2": [{"comment2": {"user":"Lily"}],
]
但事实上,它返回了错误的结果:
[
"feed1": [{"comment1": {"user": "Lily"}}, {"comment2": {"user": "Bruce"}]
]
我只想删除Jack没有评论的评论,但它会删除所有提要,如果其中一条评论有相同的用户Jack您可以预取除Jack评论之外的所有评论
feeds = Feed.objects.filter(user__name="Jack").prefetch_related(
Prefetch(
"feed_set",
queryset="comment.objects.exclude(user__name='Jack')",
to_attr='all_comments'
)
您可以通过以下方式获得每个提要的注释:
for feed in feeds:
comments = feed.all_comments #No database call is made by this statement
请参阅以了解有关预回迁的更多信息。您可以预回迁除jack评论以外的所有评论
feeds = Feed.objects.filter(user__name="Jack").prefetch_related(
Prefetch(
"feed_set",
queryset="comment.objects.exclude(user__name='Jack')",
to_attr='all_comments'
)
您可以通过以下方式获得每个提要的注释:
for feed in feeds:
comments = feed.all_comments #No database call is made by this statement
请参阅以了解有关预回迁的更多信息。首先,您应该检索用户的所有提要,然后,您可以检索每个提要上的所有评论,不包括Jackson发布的评论。这是唯一的方法吗???连接SQLU需要两次,您可以使用预回迁优化它。我不知道这是不是唯一的办法。也许其他开发人员有不同的方法。首先,你应该检索用户的所有提要,然后,你可以检索每个提要上的所有评论,不包括Jackson发布的评论。这是唯一的方法吗???连接SQLU需要两次,您可以使用预回迁优化它。我不知道这是不是唯一的办法。也许其他开发人员有不同的方法。你真是太棒了!!!你解决了我的问题,这对我来说很难!!!非常感谢你!!!我很高兴能帮助你。你很好!!!你解决了我的问题,这对我来说很难!!!非常感谢你!!!我很乐意帮助你。