在Model字段的子集上进行DRF字段验证

时间:2020-05-03 11:34:08

标签: django validation django-rest-framework

允许我首先使用一些相关的片段来勾画我的Django / DRF项目的相关部分(请注意,以下代码片段不会产生有效的代码,但是可以显示我的问题的总体结构):

models.py

class Sample(models.model):
    property_one = models.CharField(max_length=10, validators=property_one_validators)
    property_two = models.CharField(max_length=10, validators=property_two_validators)
    property_three = models.CharField(max_length=10, validators=property_three_validators)
    property_four = models.CharField(max_length=10, validators=property_four_validators)

serializers.py

class SampleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Sample
        fields = '__all__'

views.py

class SampleViewSet(viewsets.ModelViewSet):
    serializer = SampleSerializer

    @action(detail=True, methods=["get"])
    def method_one(self, request, pk):
        # Require property_one and property_three in request.data

    @action(detail=True, methods=["get"])
    def method_two(self, request, pk):
        # Require property_one and property_two in request.data

    @action(detail=True, methods=["get"])
    def method_three(self, request, pk):
        # Require property_two and property_four in request.data

您会看到Sample模型的参数的各个子集在可用的API请求中使用。我想做的是使用它们各自的验证器来验证每个API请求中的必需参数(例如,使用property_one中定义的property_one_validators来验证models.py)。

根据我对Serializer文档的了解,您可以使用validate来验证完整的Model类(例如,使用property_oneproperty_four),但我想使用相同的序列化程序或至少使用其功能分别验证字段(例如,以某种方式使用SampleSerializer分别验证property_one)。

我的问题是,最终该功能是否存在以及是否可行。如果不是这种情况,我很想听听您对进行此验证的最通用方法的看法,而不是为每个属性子集创建一个Serializer类。

0 个答案:

没有答案