django rest框架检查序列化程序是否收到None对象

时间:2018-11-16 14:19:40

标签: python django django-rest-framework

我们的端点可以从多个模型返回,所有模型都有共同点,因此它们被映射为统一的响应,例如:

{
"reference": "November15-Inbound-1",
"note": null,
"inbound_date": "2018-11-14",
"inbound_lines": [
    {
        "article_code": "VBP_A",
        "quantity": 1
    }
]

}

现在,当执行检索或更新调用时,该对象可能不存在:

try:
    return AppInbound.objects.filter(customer__code=self.customer.code).get(**kwargs)
except AppInbound.DoesNotExist:
    return None

然后将此“无”返回到我们的序列化器,它产生以下结果:

{
    "reference": "",
    "note": "",
    "inbound_date": null,
    "inbound_lines": []
}

有没有一种方法可以检查序列化程序是否接收到None对象作为输入?无需为每个端点执行特定的代码,例如:

if serialized_data['reference'] == "":
    raise Http404

1 个答案:

答案 0 :(得分:0)

您可以在序列化程序中覆盖get_initial(),然后检查实例是否为None。此方法负责返回每个字段的初始状态。

def get_initial(self):
    if self.instance is None:
        raise Http404
    return super().get_initial()