来自post_save信号的自定义错误消息

时间:2013-08-05 09:58:02

标签: python django django-signals django-messages

好的,我将CSV文档保存到Machine对象。我想通知用户如果机器不存在则该机器不存在并退出保存。我首先通过读取序列号行来读取CSV文件以查看该文档的用途。

在我的信号中:

@receiver(post_save, sender=CSVDocument)
def read_file(sender,instance, signal, created, **kwargs):
    ...
    machine = Machine.objects.get(serial_number=sn)
    if not machine:
        customNotificationMessage in admin tempalte

我不想在这个阶段引发异常,而是告诉用户没有这样的机器,所以先创建机器。

目前,如果我拿出try块来查看机器,它会引发异常:

Machine matching query does not exist. Lookup parameters were {'serial_number': 'NEC03610154'}

我实际上只是希望在保存文件后将此execption作为消息的一部分。

1 个答案:

答案 0 :(得分:0)

抓住该异常并打印出消息:

@receiver(post_save, sender=CSVDocument)
def read_file(sender,instance, signal, created, **kwargs):
    ...
    try:
        machine = Machine.objects.get(serial_number=sn)
    exception Machine.DoesNotExist:
        machine = None
        error_message = 'Machine matching query does not exist'
    if not machine:
        customNotificationMessage in admin template
        print error_message

另一个选择是使用filter()代替get()

machine = Machine.objects.filter(serial_number=sn)

如果没有匹配,您将获得一个空的查询集。

希望它有所帮助。