|
@@ -174,11 +174,11 @@ class ListView(AdminView):
|
|
|
|
|
|
|
|
|
|
class TargetedView(AdminView):
|
|
class TargetedView(AdminView):
|
|
- def check_permissions(self, request, target=None):
|
|
|
|
|
|
+ def check_permissions(self, request, target):
|
|
pass
|
|
pass
|
|
|
|
|
|
def get_target(self, kwargs):
|
|
def get_target(self, kwargs):
|
|
- if len(kwargs):
|
|
|
|
|
|
+ if len(kwargs) == 1:
|
|
return self.get_model().objects.get(pk=kwargs[kwargs.keys()[0]])
|
|
return self.get_model().objects.get(pk=kwargs[kwargs.keys()[0]])
|
|
else:
|
|
else:
|
|
return self.get_model()()
|
|
return self.get_model()()
|
|
@@ -202,38 +202,72 @@ class TargetedView(AdminView):
|
|
|
|
|
|
return self.real_dispatch(request, target)
|
|
return self.real_dispatch(request, target)
|
|
|
|
|
|
- def real_dispatch(self, request, target=None):
|
|
|
|
|
|
+ def real_dispatch(self, request, target):
|
|
pass
|
|
pass
|
|
|
|
|
|
|
|
|
|
class FormView(TargetedView):
|
|
class FormView(TargetedView):
|
|
- form = None
|
|
|
|
|
|
+ Form = None
|
|
template = 'form.html'
|
|
template = 'form.html'
|
|
- message_submit = None
|
|
|
|
|
|
|
|
- def create_form(self, request, target=None):
|
|
|
|
- return self.form
|
|
|
|
|
|
+ def create_form_type(self, request):
|
|
|
|
+ return self.Form
|
|
|
|
|
|
- def initialize_form(self, FormType, request, target=None):
|
|
|
|
|
|
+ def initialize_form(self, FormType, request):
|
|
if request.method == 'POST':
|
|
if request.method == 'POST':
|
|
- return self.form(request.POST, request.FILES, instance=target)
|
|
|
|
|
|
+ return FormType(request.POST, request.FILES)
|
|
else:
|
|
else:
|
|
- return self.form(instance=target)
|
|
|
|
|
|
+ return FormType()
|
|
|
|
|
|
def handle_form(self, form, request):
|
|
def handle_form(self, form, request):
|
|
|
|
+ raise NotImplementedError(
|
|
|
|
+ "You have to define your own handle_form method to handle "
|
|
|
|
+ "form submissions.")
|
|
|
|
+
|
|
|
|
+ def real_dispatch(self, request, target):
|
|
|
|
+ FormType = self.create_form_type(request)
|
|
|
|
+ form = self.initialize_form(FormType, request)
|
|
|
|
+
|
|
|
|
+ if request.method == 'POST' and form.is_valid():
|
|
|
|
+ response = self.handle_form(form, request)
|
|
|
|
+
|
|
|
|
+ if response:
|
|
|
|
+ return response
|
|
|
|
+ elif 'stay' in request.POST:
|
|
|
|
+ return redirect(request.path)
|
|
|
|
+ else:
|
|
|
|
+ return redirect(self.root_link)
|
|
|
|
+
|
|
|
|
+ return self.render(request, {'form': form})
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class ModelFormView(FormView):
|
|
|
|
+ message_submit = None
|
|
|
|
+
|
|
|
|
+ def create_form_type(self, request, target):
|
|
|
|
+ return self.Form
|
|
|
|
+
|
|
|
|
+ def initialize_form(self, FormType, request, target):
|
|
|
|
+ if request.method == 'POST':
|
|
|
|
+ return FormType(request.POST, request.FILES, instance=target)
|
|
|
|
+ else:
|
|
|
|
+ return FormType(instance=target)
|
|
|
|
+
|
|
|
|
+ def handle_form(self, form, request, target):
|
|
form.instance.save()
|
|
form.instance.save()
|
|
if self.message_submit:
|
|
if self.message_submit:
|
|
- message = self.message_submit % unicode(form.instance)
|
|
|
|
- messages.success(request, message)
|
|
|
|
|
|
+ messages.success(request, message_submit)
|
|
|
|
|
|
- def real_dispatch(self, request, target=None):
|
|
|
|
- FormType = self.create_form(request, target)
|
|
|
|
|
|
+ def real_dispatch(self, request, target):
|
|
|
|
+ FormType = self.create_form_type(request, target)
|
|
form = self.initialize_form(FormType, request, target)
|
|
form = self.initialize_form(FormType, request, target)
|
|
|
|
|
|
- if form.is_valid():
|
|
|
|
- self.handle_form(form, request)
|
|
|
|
|
|
+ if request.method == 'POST' and form.is_valid():
|
|
|
|
+ response = self.handle_form(form, request, target)
|
|
|
|
|
|
- if 'stay' in request.POST:
|
|
|
|
|
|
+ if response:
|
|
|
|
+ return response
|
|
|
|
+ elif 'stay' in request.POST:
|
|
return redirect(request.path)
|
|
return redirect(request.path)
|
|
else:
|
|
else:
|
|
return redirect(self.root_link)
|
|
return redirect(self.root_link)
|
|
@@ -242,12 +276,12 @@ class FormView(TargetedView):
|
|
|
|
|
|
|
|
|
|
class ButtonView(TargetedView):
|
|
class ButtonView(TargetedView):
|
|
- def real_dispatch(self, request, target=None):
|
|
|
|
|
|
+ def real_dispatch(self, request, target):
|
|
if request.method == 'POST':
|
|
if request.method == 'POST':
|
|
new_response = self.button_action(request, target)
|
|
new_response = self.button_action(request, target)
|
|
if new_response:
|
|
if new_response:
|
|
return new_response
|
|
return new_response
|
|
return redirect(self.root_link)
|
|
return redirect(self.root_link)
|
|
|
|
|
|
- def button_action(self, request, target=None):
|
|
|
|
|
|
+ def button_action(self, request, target):
|
|
raise NotImplementedError("You have to define custom button_action.")
|
|
raise NotImplementedError("You have to define custom button_action.")
|