Django REST框架如何限制用户对特定序列化程序字段的访问
我有一个模型:Django REST框架如何限制用户对特定序列化程序字段的访问,django,django-rest-framework,Django,Django Rest Framework,我有一个模型: from django.db import models from django.contrib.auth.models import Group class Question(models.Model): text = models.TextField() group = models.OneToOneField(Group) 当被要求回答问题时,我只想返回文本部分。因为用户不需要查看组部分。但是,在保存模型时,我需要为用户填写组部分 以下是序列化程序: c
from django.db import models
from django.contrib.auth.models import Group
class Question(models.Model):
text = models.TextField()
group = models.OneToOneField(Group)
当被要求回答问题时,我只想返回文本
部分。因为用户不需要查看组
部分。但是,在保存模型时,我需要为用户填写组
部分
以下是序列化程序:
class QuestionSerializer(ModelSerializer):
class Meta:
model = Question
fields = (text)
如果我像上面那样定义序列化程序,则在保存它时无法执行类似操作:
def put(request, pk):
data = JSONParser().parse(request)
group = Group.objects.get(pk=pk)
qSerializer = QuestionSerializer(data=data, group=group) # the serializer does not know about group
那么在这种情况下我应该怎么做
更新: @Anush向我指出了写入方向,解决方案是:
class QuestionSerializer(ModelSerializer):
class Meta:
model = Question
fields = ('text','group')
extra_kwargs = {'group': {'write_only': True}}
然后,在视图中:
def put(...):
data['group'] = group.pk
serializer = QuestionSerializer(data=data)
if serializer.is_valid():
serializer.save()
else:
raise serializers.ValidationError(serializer.errors)
您可以使
组
仅在问题序列化程序
中写入,如:
class QuestionSerializer(ModelSerializer):
class Meta:
model = Question
fields = ('text','group')
extra_kwargs = {'group': {'write_only': True}}
了解更多信息以下是我根据您的建议得到的信息,
TypeError:\uuuu init\uuuuu()得到了一个意外的关键字参数“group”
@Cheng您使用的是哪个版本的django rest framework
?我安装的DRF是3.3.1。我简化了我的问题,我不知道错误是否是由于这个。你能在你这边验证这个解决方案吗?@Cheng问题就在这里:qSerializer=QuestionSerializer(data=data,group=group)
试试看:data['group']=group
nextqSerializer=QuestionSerializer(data=data)
谢谢你为我指明了正确的方向。我尝试了这个方法并使用了data['group']=group.pk