如何在 django rest 框架中动态设置 read_only?

How to set read_only dynamically in django rest framework?

我正在尝试检查用户 ID 是否不等于 1 那么他应该不能更新几个字段。我尝试了类似于以下代码的方法,但由于以下问题而无法正常工作

  1. self.user.id 实际上 return 用户我需要以不同的方式获取经过身份验证的用户,为什么?
  2. def 函数可能应该有一个不同的名称,例如 update?
  3. 也可能是一般的方式不对?
class ForAdmins(serializers.ModelSerializer)):

    class Meta:
        model = User
        fields = '__all__'

class ForUsers(serializers.ModelSerializer)):

    class Meta:
        read_only_fields = ['email','is_role_veryfied','is_email_veryfied']
        model = User
        fields = '__all__'

class UsersSerializer(QueryFieldsMixin, serializers.ModelSerializer):
    def customize_read_only(self, instance, validated_data):
        if (self.user.id==1):
           return ForAdmins
        else:
           return ForUsers

    class Meta:
        # read_only_fields = ['username']
        model = User
        fields = '__all__'

您可以从您的视图中决定要传递哪个序列化程序 要么 您可以在 modelSerializer 更新方法中进行。

从 Serializer 获取用户 class 尝试:

    request = self.context.get('request', None)
    if request:
        user = request.user

从视图获取用户 class 尝试:

    user = self.request.user