gpt4 book ai didi

django - Django Rest框架:限制可以更新的字段

转载 作者:行者123 更新时间:2023-12-03 13:36:10 24 4
gpt4 key购买 nike

我希望用户只能更新一个特定字段。例如:

models.py

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',)

序列化器
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ('id', 'title', 'code', 'linenos', 'language', 'style')

views.py
class SnippetList(generics.ListCreateAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer


class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer

创建了 Snippet后,用户应该只能更新 title字段。

我知道我可以通过以下方式实现这一目标:

serializers.py
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

在序列化器类中。但我想知道,有一种方法可浏览的api仅以编辑形式显示 title字段吗?并也跳过不需要的字段的验证?

最佳答案

Django REST Framework提供了read_onlywrite_only属性,用于控制用于编辑的内容和不用于编辑的内容。
serializers.py

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}
}
上面将返回读取请求的所有字段,但是只有标题是可写的。
您可以在官方文档中找到更多信息:
http://www.django-rest-framework.org/api-guide/serializers/#specifying-read-only-fields

关于django - Django Rest框架:限制可以更新的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32650342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com