Я разрабатываю API, который будет использоваться разными партнерами. Ниже приведена полезная нагрузка API: -
{
key1: value1,
key2: value2,
key3: value3,
key4: value4,
key5: value5,
partner: partner_code
}
Теперь у меня есть модель, в которой необходимо сохранить поля выше.
class Table(models.Model):
key1 = models.IntegerField()
key2 = models.IntegerField(blank=True, null=True)
key3 = models.IntegerField()
key4 = models.IntegerField(blank=True, null=True)
key5 = models.CharField(max_length=255)
partner = models.ForeignKey(Partner)
Также у меня есть сериализатор: -
class TableSerializer(models.Model):
class Meta:
model = Table
fields = '__all__'
Теперь, когда данные отправляются, я сериализую (и проверю ) данные, а затем сохраняю их. Вот как я это делаю.
serializer = TableSerializer(data=payload)
if serializer.is_valid():
serializer.save()
Это нормальный поток DRF. Теперь возникает проблема, заключающаяся в том, что мне нужно применять пользовательские проверки к каждому партнеру. Например: -
`key2` and `key4` are mandatory for PartnerA. Similarly, for PartnerB, max value of `key1` is 100 and many more.
Согласно текущему потоку DRF, мне нужно добавить if-else
условия в сериализаторах.
class TableSerializer(models.Model):
def validate(self, data):
if partner == `partnerA`:
# checkfor key1 max value.
# check the mandatory fields.
elif partner == `partnerB`:
# some custom validations
# and so on
class Meta:
model = Table
fields = '__all__'
Это if-else
может продолжать расти, что является плохим дизайном. Как я могу представить другой компонент с именем Validation Engine
, который может сначала проверить данные, а затем передать проверенные данные в сериализаторы DRF?