2015-02-19 2 views
0

Что такое «правильный» способ обработки ошибок внутри пользовательской функции form_valid()?Django: Как правильно обрабатывать ошибку на пользовательском form_valid()

E.g. Я имею представление, которое оказывает этот метод form_valid(), определенный:

class StorageItemMergeView(FormView): 
# ... 

def form_valid(self, form): 
    si = StorageItem.objects.get(pk=self.kwargs["pk"]) 
    si.part.merge_storage_items(si, StorageItem.objects.get(
            pk=self.request.POST["storageitem1"] 
           ) 
           ) 
    return super(StorageItemMergeView, self).form_valid(form) 

Форма для этого тихо минимален:

class MergeStorageItemsForm(forms.Form): 
    storageitem1 = forms.ModelChoiceField(queryset=StorageItem.objects.all()) 

В самом деле пользователь может заполнить синтаксический правильно данные, которые не выполняются при вызове merge_storage_items().

В моем случае merge_storage_items() может возвращать True или False, но как правильно реагировать в случае отказа метода?

ответ

1

Правильный способ заключается не в том, чтобы делать это в form_valid вообще. Это не то, для чего. Этот метод называется одним, форма была проверена и отвечает за сохранение и перенаправление.

Правильное место для этого в самом классе формы, где вы бы переопределили метод clean и поднимите forms.ValidationError, если проверка не удалась.

+0

На самом деле в моем случае правильная правильность ввода правильная. Но wodering, как реагировать, если $ action, основанный на действительном вводе, терпит неудачу. – frlan

+0

На самом деле после игры вокруг это, кажется, хороший намек. Логика теперь делается на уровне модели в моем случае и вызывает исключение. – frlan