Кодирование в UpdateVIEW из django

У меня есть кнопка редактирования на моем webapp, которая ссылается на UpdateView с Django. Проблема в том, что я не знаю способа выполнения вычислений перед сохранением изменений в базе данных на UpdateView.

Когда я создаю регистр, он сохраняется после прохождения через некоторые вычисления, функции и т.д., и для создания он вызывает эту функцию:

def post_create(request):

form = InsereCursosForm()
if(request.method == 'POST'):
    form = InsereCursosForm(request.POST)
    print(form)

    if(form.is_valid()):

        def calculos():
            post_nmCurso = form.cleaned_data['nmCurso']
            post_acFaculdade = form.cleaned_data['acFaculdade']
            post_nuMaterias = form.cleaned_data['nuMaterias']
            post_nmInstituicao = form.cleaned_data['nmInstituicao']
            post_nmPlayer = form.cleaned_data['nmPlayer']
            post_nuHoras = form.cleaned_data['nuHoras']
            post_acWorkshop = form.cleaned_data['acWorkshop']
            post_acImplementacao = form.cleaned_data['acImplementacao']
            post_acComunik = form.cleaned_data['acComunik']

            def seFaculdade(post_acFaculdade, post_nuMaterias, post_nuHoras):
                if post_acFaculdade == True:
                    post_nuHoras = post_nuMaterias * 4
                    return post_nuHoras             
                else:
                    return post_nuHoras

            post_nuHoras = seFaculdade(post_acFaculdade, post_nuMaterias, post_nuHoras)

            def ptWorkshopsF(post_nuHoras, post_acWorkshop):
                if post_acWorkshop == True:
                    v = post_nuHoras * Decimal('0.2')
                    return v
                else:
                    return 0

            def ptImplementacaoF(post_nuHoras, post_acImplementacao):
                if post_acImplementacao == True:
                    return post_nuHoras * Decimal('0.45')
                else:
                    return 0

            def ptComunikF(post_nuHoras, post_acComunik):
                if post_acComunik == True:
                    return post_nuHoras * Decimal('0.1')
                else:
                    return 0
        
            getcontext().prec=2

            post_ptHoras = float((Decimal(post_nuHoras * 0.45))/Decimal('1')) 
            post_ptWorkshop = float(Decimal(ptWorkshopsF(post_nuHoras, post_acWorkshop))/Decimal('1')) 
            post_ptImplementacao = float(Decimal(ptImplementacaoF(post_nuHoras, post_acImplementacao))/Decimal('1')) 
            post_ptComunik = float(Decimal(ptComunikF(post_nuHoras, post_acComunik))/Decimal('1'))

            

            new_post = Cursos(nmCurso=post_nmCurso, acFaculdade=post_acFaculdade, nuMaterias=post_nuMaterias,nmInstituicao=post_nmInstituicao, nmPlayer=post_nmPlayer,nuHoras=post_nuHoras, ptHoras=post_ptHoras,acWorkshop = post_acWorkshop, ptWorkshop=post_ptWorkshop ,acImplementacao= post_acImplementacao, ptImplementacao=post_ptImplementacao,acComunik = post_acComunik, ptComunik=post_ptComunik)
            print(new_post)
            new_post.save()
        calculos()   
        return redirect('app:lista_curso')
elif(request.method == 'GET'):
    return render(request, 'app/curso_forms.html', {'form': form})

Правильно знать, что updateView это:

class CursosUpdate(UpdateView):
    template_name = "app/curso_update.html"
    model = Cursos
    fields = [
        'nmCurso',
        'acFaculdade',
        'nuMaterias',
        'nmInstituicao',
        'nmPlayer',
        'nuHoras',
        'acWorkshop',
        'acImplementacao',
        'acComunik']  

context_object_name = 'cursos'
success_url = reverse_lazy("app:lista_curso")
Вернуться на верх