Насколько я знаю, не существует простого способа сделать это, используя традиционные общие представления. Я всегда чувствовал, что документации по общим представлениям довольно не хватает, и поэтому никогда не использовал их.
Теоретически вы можете использовать декоратор, предполагая, что перенаправление означает успешную отправку.
Таким образом, вы могли бы написать что-то вроде этого (ни один из этого кода не был проверен):
urls.py
try:
from functools import wraps
except ImportError:
from django.utils.functional import wraps
from django.http import HttpRedirectResponse
from django.contrib import messages
from django.views.generic import *
def add_message(success_message=None):
def decorator(func):
def inner(request, *args, **kwargs):
resp = func(request, *args, **kwargs)
if isinstance(resp, HttpRedirectResponse):
messages.success(request, message)
return resp
return wraps(func)(inner)
return decorator
student_info_edit = {
'template_name': 'myapp/student/form.html',
'template_object_name': 'student',
'form_class': studentForm,
}
student_info_new = {
'template_name': 'myapp/student/form.html',
'form_class': studentForm,
'post_save_redirect': '/myapp/students/',
}
urlpatterns += patterns('',
url(r'^students/$', list_detail.object_list, { 'queryset': Student.objects.all() }, name="students"),
url(r'^students/(?P<object_id>\d+)/$', add_message("Student record updated successfully")(create_update.update_object), student_info_edit, name="student_detail"),
url(r'^students/new$', add_message("The student was added successfully.")(create_update.create_object), student_info_new, name="student_new"),
)
Все, что было сказано и закодировано, Django 1.3 представило основанные на классах универсальные представления , поэтому, если вы заинтересованы в переходе на Django 1.3, вам следует изучить их. Они могут позволить больше настроек, не уверен.
В долгосрочной перспективе я редко вижу форму преимущества, использующую общие представления, и это удваивается для таких вещей, как добавление / обновление.