【问题标题】:I want to pass a parameter isloggedin user to the django frontend我想将参数 isloggedin 用户传递给 django 前端
【发布时间】:2019-06-14 02:00:41
【问题描述】:

我正在将用户对象列表传递给前端。前端想要分别显示当前登录的用户信息和其他用户信息。为此,我想在用户序列化程序中传递一个额外的字段。我正在使用视图集和序列化程序将用户列表传递给 django 前端。我该怎么做。

我的序列化器看起来像

class SomeUserSerializer(serializers.ModelSerializer):
    """
    Serializer for `some_user` table
    """
    isLogedInUser = serializers.SerializerMethodField('is_logged_in_user')
    user = UserSerializer(many=False)

    def is_logged_in_user(self, request):
        return self.user==request.user

    class Meta:
        model = SomeUser
        fields = ('user', 'something', 'isLogedInUser')

我的 is_logged_in_user 方法有问题。它应该与用户对象一起返回真或假标志,具体取决于它是否是当前登录的用户

【问题讨论】:

  • 我使用的是序列化程序和视图集,而不是表单和模板
  • "Something is wrong" 不是问题描述...

标签: django django-rest-framework


【解决方案1】:

isLogedInUser 使用的序列化方法采用名为request 的参数。但是,根据documentation,该方法是使用被序列化的对象(SomeUser 的实例)调用的。

您需要更改参数并通过additional context 获取请求,如下所示:

    class SomeUserSerializer(serializers.ModelSerializer):
        """
        Serializer for `some_user` table
        """
        isLogedInUser = serializers.SerializerMethodField('is_logged_in_user', context={'request': request})
        user = UserSerializer(many=False)

        def is_logged_in_user(self, obj):
            return obj.user == self.context['request'].user

        class Meta:
            model = SomeUser
            fields = ('user', 'something', 'isLogedInUser')

【讨论】:

  • 它对我有用,只需稍作修改。我在调用 serializers.SerializerMethodField() 时没有传递 'context={'request': request}'
猜你喜欢
  • 2019-03-16
  • 1970-01-01
  • 2015-03-30
  • 2017-01-15
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多