Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我不能在Django应用程序中获取当前用户的以下用户吗?_Django_Django Rest Framework - Fatal编程技术网

为什么可以';我不能在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()