我对Django有以下看法。我可以对常规视图执行相同的操作吗?

2024-10-08 18:22:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Django有以下看法。我可以对常规视图执行相同的操作吗?你知道吗

你知道吗# 型号:

风险评估 #包含名称和信息

风险线 #每行包含多行(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) )

Tags: instancereturnifrequestsavepost风险risk
2条回答

您可以尝试以下方法:

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

如果你有一个基于函数的视图,你不必切换到基于类的视图。你知道吗

没有一个内置的通用视图是为表单集设计的。如果使用基于Django类的视图,则必须进行大量的定制。你知道吗

一种选择是使用django额外视图中的^{}。你知道吗

相关问题 更多 >

    热门问题