如何在 django rest 框架中动态设置 read_only?
How to set read_only dynamically in django rest framework?
我正在尝试检查用户 ID 是否不等于 1 那么他应该不能更新几个字段。我尝试了类似于以下代码的方法,但由于以下问题而无法正常工作
self.user.id
实际上 return 用户我需要以不同的方式获取经过身份验证的用户,为什么?
- def 函数可能应该有一个不同的名称,例如
update
?
- 也可能是一般的方式不对?
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
我正在尝试检查用户 ID 是否不等于 1 那么他应该不能更新几个字段。我尝试了类似于以下代码的方法,但由于以下问题而无法正常工作
self.user.id
实际上 return 用户我需要以不同的方式获取经过身份验证的用户,为什么?- def 函数可能应该有一个不同的名称,例如
update
? - 也可能是一般的方式不对?
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