【问题标题】:Implement different serializing strategy for HTTP methods为 HTTP 方法实现不同的序列化策略
【发布时间】:2020-08-11 23:30:26
【问题描述】:

使用下面列出的型号和序列号:

# Django Model class
class Model(models.Model):
    id = models.CharField(max_length=10, primary_key=True)
    name = models.CharField(max_length=30)


# DRF serializer class
class ModelSerializer(serializers.ModelSerializer):
    class Meta:
        fields = ["id", "name"]
        model = Model

如何实现序列化程序以接受和验证 HTTP POST 请求的 id 字段(它应该是唯一并且最多 10 个字符)但对于 @ 987654324@ 请求应跳过唯一验证,只需检查len(id) <= 10

我正在寻找一种惯用、干净和有效的方法来做到这一点。

【问题讨论】:

    标签: python django django-models django-rest-framework


    【解决方案1】:

    白痴、干净、高效。这些是我的最爱。 这应该足够可读。

    # DRF serializer class
    class ModelSerializer(serializers.ModelSerializer):
        class Meta:
            fields = ["id", "name"]
            model = Model
    
        def validate_id(self, invalidated_id):
            request = self.context['request']
            # do logic based on request type and invalidated_id
            
    
    # views.py
    def my_weird_func(request, **kwrags):
        myModelInstance = kwargs['id'] # or whatever, this is a demonstration
        serializer = ModelSerializer(myModelInstance, context={'request': request})
        
        return Response('This is what're expecting')
    

    【讨论】:

    • 我做到了ModelSerializer(data=request.data, context={"request": request}),但访问self.context["request"] 会引发KeyError
    猜你喜欢
    • 2014-10-21
    • 2021-02-11
    • 1970-01-01
    • 2011-10-25
    • 2011-09-09
    • 2011-05-20
    • 2021-03-24
    • 2021-05-26
    相关资源
    最近更新 更多