为什么可以';我不能在Django应用程序中获取当前用户的以下用户吗?
我对用户对象使用标准的为什么可以';我不能在Django应用程序中获取当前用户的以下用户吗?,django,django-rest-framework,Django,Django Rest Framework,我对用户对象使用标准的auth.User模型,我的Follow对象模型定义如下: class Follow(models.Model): owner = models.ForeignKey( 'auth.User', related_name='followers', on_delete=models.CASCADE, null=False ) following = models.ForeignKey(
auth.User
模型,我的Follow
对象模型定义如下:
class Follow(models.Model):
owner = models.ForeignKey(
'auth.User',
related_name='followers',
on_delete=models.CASCADE,
null=False
)
following = models.ForeignKey(
'auth.User',
related_name='following',
on_delete=models.CASCADE,
null=False
)
class PublicUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username')
read_only_fields = ('id', 'username')
class FollowingView(generics.ListAPIView):
serializer_class = PublicUserSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return self.request.user.following.all()
我使用的序列化程序如下所示:
class Follow(models.Model):
owner = models.ForeignKey(
'auth.User',
related_name='followers',
on_delete=models.CASCADE,
null=False
)
following = models.ForeignKey(
'auth.User',
related_name='following',
on_delete=models.CASCADE,
null=False
)
class PublicUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username')
read_only_fields = ('id', 'username')
class FollowingView(generics.ListAPIView):
serializer_class = PublicUserSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return self.request.user.following.all()
我的看法如下:
class Follow(models.Model):
owner = models.ForeignKey(
'auth.User',
related_name='followers',
on_delete=models.CASCADE,
null=False
)
following = models.ForeignKey(
'auth.User',
related_name='following',
on_delete=models.CASCADE,
null=False
)
class PublicUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username')
read_only_fields = ('id', 'username')
class FollowingView(generics.ListAPIView):
serializer_class = PublicUserSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return self.request.user.following.all()
这是返回一个空的结果集,原因我无法理解。但是,如果我对视图使用以下代码,它将返回正确的查询集:
class FollowingView(generics.ListAPIView):
serializer_class = PublicUserSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
follows = Follow.objects.filter(owner=self.request.user).values_list('following_id', flat=True)
return User.objects.filter(id__in=follows)
那么,为什么我不能使用
self.request.user.following.all()
?来获得正确的查询集呢
User.objects.filter(id__in=follows)
正在使用Django从数据库中获取可用用户的列表,然后将其筛选到用户的子集
鉴于:
self.request.user.following.all()
正在从请求中获取其信息。因此,除非您将完整的数据集与您的请求一起传递进来,否则您永远不会得到您在这里期望的结果。OK,这是有道理的。但是,如果我尝试按如下方式检索用户,仍然会得到一个空结果集:
user=user.objects.get(id=self.request.user.id)return user.following.all()