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
next
qSerializer=QuestionSerializer(data=data)
谢谢你为我指明了正确的方向。我尝试了这个方法并使用了
data['group']=group.pk