在django中加入queryset

时间:2018-02-17 10:57:54

标签: python django orm

我有模特

class FriendsWith(models.Model):
    username = models.ForeignKey(User,on_delete=models.CASCADE)
    fusername =models.ForeignKey(User,on_delete=models.CASCADE,related_name='fusername')  
    time = models.DateTimeField(auto_now_add=True)
    confirm_request = models.SmallIntegerField(default=1)
    blocked_status = models.IntegerField(default=0)

我想搜索当前登录用户的所有朋友。所以,我这样做

obj1=FriendsWith.objects.filter(username=request.user).select_related('fusername')
obj2=FriendsWith.objects.filter(fusername=request.user).values('username')
obj=obj1 | obj2
friendslist=User.objects.filter(username__in=obj)

用户是django用户模型 我试图结合这里设置的两个queryset(obj1和obj2)但是它不起作用。我可以通过使用别名在sql中做同样的事情。但是在这里我不知道该怎么做。

执行上述代码时出现此错误:

TypeError:合并'QuerySet'类在每种情况下都必须包含相同的值

请帮助完成此任务

1 个答案:

答案 0 :(得分:0)

我认为你应该做的事情是'或'在过滤功能中:

from django.db.models import Q
friendship = FriendsWith.objects.filter(Q(username=request.user)|Q(fusername=request.user))

friendship是一个查询集,其中当前用户可以是usernamefusername。您可以使用该集来获取应该成为他们朋友的替代用户。

另一种解决方案是使用django-friendship。它是一个很好的django库,用于处理用户之间的友情和朋友请求等。