2012-03-02 5 views
1

В дополнение к этому question, если бизнес-логика должна быть в модели, как мне вернуть сообщение об ошибке из модели?Как вернуть сообщение об ошибке из модели?

def save(self, *args, **kwargs): 
    if <some condition>: 
     #return some error message to the view or template 
+1

Ваша бизнес-логика (будь то в модели, диспетчере модели или где) может просто поднять исключение, которое можно поймать на уровне представления и значительную ошибку, сообщаемую пользователю (или некоторую обработку ошибок). –

ответ

3

Pastylegs правильно, но вы не должны делать что-то логику в методе save. Перед сохранением Django имеет встроенную систему для validating model instances - вы должны использовать это и при необходимости поднять ValidationError.

+0

Спасибо, я попробую позже сегодня днем. – radztech

1

Создание исключения - это способ сообщить о ошибке программы (ошибка в «бизнес-логике»), о чем вы говорите. Вы можете просто вызвать исключение, так как pastylegs предлагает (быть в курсе, что SomeException просто заполнитель):

from django.core.exceptions import SomeException 

def save(self, *args, **kwargs): 
    if <some condition>: 
     raise SomeException('your message here') 

Вы можете найти доступные исключения F Джанго здесь: https://docs.djangoproject.com/en/1.3/ref/exceptions/, плюс вы можете также использовать стандартные исключения питона, для которого вы можете найти здесь документацию: http://docs.python.org/library/exceptions.html

Я бы порекомендовал вам найти Исключение, описывающее вашу проблему, или вы будете очень смущены, если эта ошибка проявится через несколько недель, когда вы не можете вспомнить, что именно у вас есть делали сейчас.

+1

Этот ответ хорош с точки зрения python, но не подходит для Django. Почти все представления Django написаны с предположением, что экземпляр действителен до вызова метода сохранения. Поэтому взгляды не пойдут на исключение, и ваш пользователь получит сообщение об ошибке сервера 500. См. Ответ Дэниела для правильного подхода в Django. – Alasdair

Смежные вопросы