sam*_*eri 18 django django-rest-framework
我希望用户只能更新一个特定字段.例如:
class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
code = models.TextField()
linenos = models.BooleanField(default=False)
language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)
class Meta:
ordering = ('created',)
Run Code Online (Sandbox Code Playgroud)
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ('id', 'title', 'code', 'linenos', 'language', 'style')
Run Code Online (Sandbox Code Playgroud)
class SnippetList(generics.ListCreateAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
Run Code Online (Sandbox Code Playgroud)
一旦Snippet
创建,用户应该只能更新title
字段.
我知道我可以通过以下方式实现这一目标:
def update(self, instance, validated_data):
"""
Update and return an existing `Snippet` instance, given the validated data.
"""
instance.title = validated_data.get('title', instance.title)
instance.save()
return instance
Run Code Online (Sandbox Code Playgroud)
在序列化器类中.但我想知道,是否有一种方式可浏览的api只显示title
编辑形式的字段?并且还跳过不需要的字段的验证?
pet*_*tas 10
Django的REST框架提供read_only
和write_only
控制什么是用于编辑,哪些不是属性.
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ('id', 'title', 'code', 'linenos', 'language', 'style')
extra_kwargs = {
'id': {'read_only': True},
'code': {'read_only': True},
'lineos': {'read_only': True},
'language': {'read_only': True},
'style': {'read_only': True}
}
Run Code Online (Sandbox Code Playgroud)
以上将返回读取请求的所有字段,但只有标题是可写的.您可以在官方文档中找到更多信息:http: //www.django-rest-framework.org/api-guide/serializers/#specifying-read-only-fields
归档时间: |
|
查看次数: |
5041 次 |
最近记录: |