2016-02-02 6 views
1

У меня есть следующий вид, работающий над Django. Могу ли я сделать то же самое с общим представлением?У меня есть следующее представление о Django. Могу ли я сделать то же самое с общим представлением?

# модели:

RiskAssessment # содержит имя и информацию

RiskLine # содержит много строк на (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)) 
+2

Короткий ответ: да. Для более длительного ответа, пожалуйста, задайте реальный вопрос. –

ответ

0

Вы можете попробовать следующий подход:

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') 
0

Если у вас есть представление, основанное на рабочей функции, вам не нужно переключаться на представление, основанное на классе.

Ни один из встроенных общих представлений не предназначен для форм. Если вы использовали представление на основе класса Django, вам придется выполнить довольно много настроек.

Один из вариантов - использовать InlineFormsetView из django-extra-views.

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

  • Нет связанных вопросов^_^