I have the following view working on Django. Can I do the same with a Generic View?
# models :
RiskAssessment # contains name and information
RiskLine # contains many lines per (RiskAssessment ForeignKKey) #
def risk_view(request, pk=None):
if pk == None:
return HttpResponseRedirect('/fm/riskassessment/') # No pk show list
else:
risk = RiskAssessment.objects.get(id = pk)
RiskLineSet = inlineformset_factory(RiskAssessment, RiskLine, can_delete=False, exclude=('user',))
if request.method == "POST":
riskform = RiskForm(request.POST, instance=risk)
risklineset = RiskLineSet(request.POST, request.FILES, instance=risk)
if riskform.is_valid() and risklineset.is_valid():
riskform.save()
risklineset.save()
# Redirect to somewhere
if '_save' in request.POST:
return HttpResponseRedirect('/fm/riskassessmentlist/')
if '_addanother' in request.POST:
return HttpResponseRedirect('/fm/riskassessmentnew/')
else:
riskform = RiskForm(instance=risk)
risklineset = RiskLineSet(instance=risk)
return render_to_response('formulare/RiskAssessment/risk.html', {
'riskform' : riskform,
'risklineset' : risklineset,
}, context_instance=RequestContext(request) )
You could try the following approach:
from django.views.generic import TemplateView
class RiskView(TemplateView):
template_name = 'formulare/RiskAssessment/risk.html'
risk = None
RiskLineSet = None
def dispatch(self, request, *args, **kwargs):
if self.kwargs.get('pk', None) is None:
return HttpResponseRedirect('/fm/riskassessment/') # No pk show list
else:
self.risk = RiskAssessment.objects.get(id=pk)
self.RiskLineSet = inlineformset_factory(RiskAssessment, RiskLine, can_delete=False, exclude=('user',))
return super(RiskView, self).dispatch(self, request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super(RiskView, self).get_context_data(**kwargs)
context['riskform'] = RiskForm(instance=self.risk)
context['risklineset'] = self.RiskLineSet(instance=self.risk)
return context
def post(self, request, *args, **kwargs):
riskform = RiskForm(request.POST, instance=self.risk)
risklineset = self.RiskLineSet(request.POST, request.FILES, instance=self.risk)
if riskform.is_valid() and risklineset.is_valid():
riskform.save()
risklineset.save()
# Redirect to somewhere
if '_save' in request.POST:
return HttpResponseRedirect('/fm/riskassessmentlist/')
if '_addanother' in request.POST:
return HttpResponseRedirect('/fm/riskassessmentnew/')
# Otherwise, I guess you want to redirect to the same view
return HttpResponseRedirect('url_of_the_current_view')