【发布时间】:2018-07-03 10:42:54
【问题描述】:
我正在设计一个可供不同合作伙伴使用的 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 序列化程序?
【问题讨论】:
标签: python django django-rest-framework django-validation