允许我首先使用一些相关的片段来勾画我的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_one
到property_four
),但我想使用相同的序列化程序或至少使用其功能分别验证字段(例如,以某种方式使用SampleSerializer
分别验证property_one
)。
我的问题是,最终该功能是否存在以及是否可行。如果不是这种情况,我很想听听您对进行此验证的最通用方法的看法,而不是为每个属性子集创建一个Serializer类。