![](/img/trans.png)
[英]How to map JSON keys with non-alphanumeric characters in Django Rest Framework Serializer
[英]How to deprecate redundant keys in Django REST for serializer?
我有:
models.py:
class MyModel(models.Model):
uuid = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False)
name = models.CharField(max_length=32)
resources.py:
class MyModelSerializer(serializers.ModelSerializer):
class Meta(object):
model = models.MyModel
class MyModelViewSet(viewsets.ModelViewSet):
queryset = models.MyModel.objects.all()
serializer_class = LinkSerializer
我可以執行以下請求:curl -X“ POST” -H“內容類型:application / json” -d'{“ name”:“ name1”,“ redundant”:“ value”}' http://127.0。 0.1:8000 / mymodel /
我會得到201。
我的問題是:“如何棄用冗余密鑰?” 模型(或MyModelSerializer)不包含的鍵。
更新。
好吧,我創建了以下mixin:
from rest_framework import serializers
from rest_framework import exceptions as rest_framework_exceptions
class RedundantSerializer(serializers.Serializer):
"""This Mixin should provide possibility for checking redundant keys
in request data
"""
def to_internal_value(self, data):
_writable_fields_names = [
field.source for field in self._writable_fields
]
errors = {}
for key in data.keys():
if key not in _writable_fields_names:
errors[key] = "This field is redundant"
if errors:
raise rest_framework_exceptions.ValidationError(errors)
return super(RedundantSerializer, self).to_internal_value(data)
並在上面的Serializer中繼承了它:
class MyModelSerializer(RedundantSerializer, serializers.ModelSerializer):
class Meta(object):
model = models.MyModel
您將需要覆蓋視圖的創建/更新,並將request.data中的鍵與serializer.validated_data中的鍵進行比較(使用一組鍵即可輕松完成):
deprecated_keys = set(request.data.keys()) - set(serializer.validated_data)
然后,您將處理所需的任何邏輯:例如,使用已棄用的鍵返回400錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.