1

私はしばらくこれに取り組んできましたが、あなたの助けを求めることにしました。私は進行中のプロジェクトを持っており、django フレームワークを使用してサイトを構築しています。ユーザー入力を要求する html ページがありますform.cleaned_data['']。あ

#This is my views.py;



 from django.shortcuts import render_to_response
    from django.template import RequestContext

    from forms import CarloanForm


    def index(request):
        form = CarloanForm()
        if request.POST:
            form = CarloanForm(request.POST)
            if form.is_valid():
                form.save()
        else:
            form = CarloanForm()
        return render_to_response('carloan/index.html', {'form': form},
                      context_instance=RequestContext(request))

#I am extracting the user inputs using;

amount_of_vehicle = form.cleaned_data['cost_of_vehicle_Naira'] 
tenure = form.cleaned_data['loan_repayment_tenure_Months']
interest_rate = form.cleaned_data['interest_rate_Percentage']
equity = form.cleaned_data['equity_contrib_rate_Percentage']
depreciation_rate = form.cleaned_data['depreciation_rate_Percentage']

私がしなければならないことと、その方法がわからないことは次のとおりです。

  1. ( を使用して抽出されたform.cleaned_data['']) データに対していくつかの操作を実行し、その効果のためにいくつかのコード行を記述しました。

    class LoanCalc:
        def __init__(self,amount_of_vehicle,tenure,interest_rate,equity,depreciation_rate):
            self.amount_of_vehicle = float(amount_of_vehicle)
            self.tenure = float(tenure)
            self.interest_rate = float(interest_rate)
            self.equity = float(equity)
            self.depreciation_rate = float(depreciation_rate)
        def interest(self):
            return (self.interest_rate/100) * self.amount_of_vehicle *(self.tenure/12)
        def management_fee(self):
            return 0.01 * (self.amount_of_vehicle + user.interest())
        def processing_fee(self):
            return 0.0025 *(self.amount_of_vehicle + user.interest())
        def legal_fee(self):
            return 0.0075 * (self.amount_of_vehicle + user.interest())
        def residual_amount(self):
            return 0.01 * (self.amount_of_vehicle - ((self.depreciation_rate/100) * self.amount_of_vehicle *(self.tenure/12)))
        def equity_contribution(self):
            return (self.equity/100) * self.amount_of_vehicle
        def LoanPaymentPlan(self):
            months = 1
            total_amount = self.amount_of_vehicle+user.interest()+user.management_fee()+user.processing_fee()+user.legal_fee()+user.residual_amount()
            upfront_payment = user.management_fee()+user.processing_fee()+user.legal_fee()+user.equity_contribution()+user.residual_amount()
            opening_balance = total_amount - upfront_payment
            balance = opening_balance
            while months <= self.tenure:
                if balance > 0:
                    monthly_instalment =(opening_balance/self.tenure)
                    monthly_interest = (((self.interest_rate/100) * balance)/ 12)
                    loan_payment = monthly_instalment - monthly_interest
                    closing_balance = balance - monthly_instalment
                    print'  ',months,'  ',round(balance,2),'   ', round(monthly_instalment,2),'        ',round(monthly_interest,2) \
                    , '       ',' ',round(loan_payment,2),'     ',round(closing_balance,2)
                    balance = closing_balance
                    months += 1
    return 'Thank you for using the Loan Calculator App'
    

抽出されたデータに対して上記のコードの操作を実行したいと思います。

  1. このような方法でやろうと思っています。

空の辞書を作成します。

    user = {}
    user = LoanCalc(amount_of_vehicle,tenure,interest_rate,equity,depreciation_rate)
    result= user.interest()
    result1 = user.management_fee()
     .           .
     .           .
     .           .
    result10 = user.LoanPaymentPlan()
  1. (質問 2) から得られた結果を、フォームを生成したのと同じテンプレートに渡します。

私を助けてください、私はまだジャンゴにとても慣れていません。ありがとう

これは、参照されているエラーの完全なスタックです。

Environment:


Request Method: GET
Request URL: http://127.0.0.1:9000/result/

Django Version: 1.4.1
Python Version: 2.5.4
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'carloan')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "C:\Python25\Lib\site-packages\django\core\handlers\base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "C:\Users\AJIBIKE\Documents\Circuit Atlantic\calculator\carloan\views.py" in result_page
  226.         'carloan': instance,

def result_page(request):
    if request.POST:
        form = Carloan_formForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.interest = (instance.interest_rate/100) * instance.amount_of_vehicle * (instance.tenure/12)
            instance.save()
    else:
        form = Carloan_formForm()
    return render_to_response('carloan/result.html', {'carloan': instance,'form': form},
                  context_instance=RequestContext(request))


Exception Type: UnboundLocalError at /result/
Exception Value: local variable 'instance' referenced before assignment

最新

from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect, HttpResponse

from forms import Carloan_formForm


def index(request):
    if request.POST:
        form = Carloan_formForm(request.POST)
        if form.is_valid():
            instance = form.save()
            return HttpResponseRedirect ('/result/')
    form = Carloan_formForm()
    kwvars = {
            'form': form,
            }
    return render_to_response('carloan/index.html', kwvars,
                  context_instance=RequestContext(request))


def result_page(request):
    instance = None
    if request.POST:
        form = Carloan_formForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.interest = (instance.interest_rate_Percentage/100) * instance.cost_of_vehicle_Naira * (instance.loan_repayment_tenure_Months/12)
            instance.management_fee = 0.01 * (instance.cost_of_vehicle_Naira + instance.interest)
            instance.processing_fee = 0.0025 * (instance.cost_of_vehicle_Naira + instance.interest)
            instance.legal_fee = 0.0075 * (instance.cost_of_vehicle_Naira + instance.interest)
           #i get syntax error starting from this line, and when i comment it out and the lines below, there is no syntax error.
            instance.residual_amount = 0.01 * ((instance.cost_of_vehicle_Naira - ((instance.depreciation_rate_Percentage/100) * instance.cost_of_vehicle_Naira * (instance.tenure/12))) 
            instance.equity_contribution = (instance.equity_contrib_rate_Percentage/100) * instance.cost_of_vehicle_Naira)
            instance.save()
    else:
        form = Carloan_formForm()
    return render_to_response('carloan/result.html', {'instance': instance, 'form': form},
                  context_instance=RequestContext(request))
forms.py

from django import forms
from django.forms import ModelForm

from models import Carloan_form

class Carloan_formForm(ModelForm):
    class Meta:
        model = Carloan_form
        exclude = ('interest', 'management_fee', 'processing_fee', 'legal_fee', \
                   'residual_amount', 'equity_contribution')
4

2 に答える 2

1

より簡単な方法の 1 つは、セッションのデータを 1 つのビューに保存し、次のビューで取得することです。ドキュメントが役立ちます。1

そうは言っても、問題に取り組むには他にもいくつかの方法があります。SOで何度も議論されています:

于 2012-10-29T15:28:12.943 に答える
1

1 Django Administration で、抽出されたデータに対して実行された操作の結果を保存します。(注:ユーザー入力を保存する方法はすでに知っています)

ユーザーのエントリを保存するモデルを作成します。app/models.py

class Carloan(models.Model) :
    # In addition to your model fields add the functions that are part of your LoanCalc
    ...

次に、ModelForm を作成します。app/forms.py

class CarLoanForm(forms.ModelForm) :
    class Meta:
        model = Carloan

次の点を除いて、通常と同じように CarLoanForm を使用します。app/views.py

if request.POST:
    form = CarloanForm(request.POST)
    if form.is_valid():    
        carloan = form.save()
        #pass carloan (the instance) to the template and 
        #call its functions(from LoanCalc) instead of 
        #passing all of the values separately

最後に、このモデルを登録して、管理セクションに表示されるようにしますapp/admin.py

from django.contrib import admin
from app.models import Carloan

admin.sites.register(Carloan)

2 ページを 2 つ (1 つはフォーム用、もう 1 つは結果用) に分割し、結果をページの半分に渡して、ユーザーが表示できるようにしたいと考えています。

上記の手順を使用すると、carloan がビューに渡されます。先に進み、その値をレンダリングします。

さらに:

リファクタリング インデックス

インデックス定義を少しリファクタリングする必要があります。そうしないと、POST バインドされたフォームがテンプレートに到達しません。

def index(request):
    if request.POST:
        form = CarloanForm(request.POST)
        if form.is_valid():
            instance = form.save()
    else :
        form = CarloanForm()

    return render_to_response('carloan/index.html', {'form': form},
              context_instance=RequestContext(request))

ModelForm をリファクタリングする

(form.cleaned_data[''] を使用して抽出された) データに対していくつかの操作を実行し、そのために数行のコードを記述しました。- 通常の django フォームの代わりに ModelForm を使用すると、ユーザーの値が既に入力されているモデルのインスタンスを取得し、 instance.field でそれらを参照します

抽出されたデータに対して上記のコードの操作を実行したいと思います。- 値を計算する予定のフィールドは除外リストに記載されており、フォームの検証には考慮されません。

class CarLoanForm(forms.ModelForm) :
    class Meta:
        model = Carloan
        # exclude fields that are calculated from user input
        # NOTE: these fields must be in your model
        exclude = ('interest', 'management_fee'...) 

リファクタリング結果ページ

(form.cleaned_data[''] を使用して抽出された) データに対していくつかの操作を実行し、そのために数行のコードを記述しました。

  • form.is_valid チェックの下の results_page には、行があります。instance = form.save(commit=False)これは、まだ保存されていないカルロアン モデルのインスタンスでユーザーが送信したすべての値を取得します。
  • さらに下:instance.interest = (instance.interest_rate/100) * instance.amount_of_vehicle *(instance.tenure/12)この行では、除外されたフィールド値の 1 つを計算しています (この計算はコードのコピーです)。
  • 最後に (データに対するすべての操作が完了した後)、モデルのインスタンスを保存します。
  • 次に、インスタンスをテンプレートに渡して表示します。

コード:

def result_page(request):
    if request.POST:
        form = CarloanForm(request.POST)
        if form.is_valid():
            # get an instance from the form but don't save it
            instance = form.save(commit=False)
            # calculate excluded field values
            instance.interest = (instance.interest_rate/100) * instance.amount_of_vehicle *(instance.tenure/12)
            ...
            # after you have calculated all of the excluded fields save the instance
            instance.save()

    else :
        form = CarloanForm()

    return render_to_response('carloan/result.html', {'carloan' : instance, 'form' : form},
                          context_instance=RequestContext(request))

エラー:

reference before error assignment- 割り当て前に参照されたとは何ですか? スタック トレース全体を貼り付けてください。

于 2012-10-29T15:47:37.010 に答える