【发布时间】:2020-08-26 08:45:37
【问题描述】:
我无法理解在序列化程序上执行验证的顺序。
这是我的序列化程序之一:
class InvoiceCreateSerializer(serializers.ModelSerializer):
buyer_company = serializers.PrimaryKeyRelatedField(
queryset=CompanyModel.objects.filter(is_archived=False)
)
order = serializers.PrimaryKeyRelatedField(
queryset=OrderModel.objects.filter(
is_archived=False
)
)
shipping_address = serializers.PrimaryKeyRelatedField(
queryset=AddressModel.objects.filter(
address_type=ADDRESS_TYPE[1][0]
)
)
def validate_buyer_company(self, buyer_company):
# validation for buyer company
return buyer_company
def validate_shipping_address(self, shipping_address):
# validtion for shipping address which require buyer company from request data
return shipping_address
def validate(self, attrs):
# validations for extra fields
return attrs
class Meta:
model = InvoiceModel
fields = '__all__'
这是我的发票模型:
class InvoiceModel(BaseModel):
# relative fields
buyer_company = models.ForeignKey(
CompanyModel, on_delete=models.PROTECT,
related_name='invoice_buyer_company'
)
seller_company = models.ForeignKey(
CompanyModel, on_delete=models.PROTECT,
related_name='invoice_seller_company'
)
seller_warehouse = models.ForeignKey(
WarehouseModel, on_delete=models.PROTECT,
related_name='invoice_seller_warehouse'
)
shipping_address = models.ForeignKey(
AddressModel, on_delete=models.PROTECT,
related_name='invoice_shipping_address'
)
...
现在,如果我的请求数据中不存在买方公司,它应该为必填字段引发框架验证错误。但相反,它继续进行,并且由于我的 validate_shipping_address 需要买方公司,它给出了一个关键错误。 如何事先验证必填字段,然后执行自定义字段验证?
【问题讨论】:
-
请出示您的
models.py文件 -
我已经添加了模型
-
我已经添加了答案here
标签: django-rest-framework django-serializer