Позвольте мне сначала сделать набросок соответствующих частей моего проекта 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, используя их соответствующие валидаторы (например, validate property_one
с property_one_validators
, определенным в models.py
).
Из того, что я понимаю из Serializer
документация, вы можете использовать validate
для проверки заполненного заполненного класса Model (например, с property_one
до property_four
), но я бы хотел использовать тот же Serializer или, по крайней мере, его функциональные возможности для проверки полей отдельно ( например, используйте SampleSerializer
для проверки property_one
отдельно).
Мой вопрос в конечном счете, присутствует ли эта функциональность и возможно ли это. Если это не так, я хотел бы услышать ваше мнение о том, каков наиболее общий c способ выполнения этой проверки, вместо создания класса Serializer для каждого подмножества свойств.