2013-04-12 102 views
0

我發現了以下錯誤:不受支持的操作數類型(個),/:「的QueryDict」和「浮動」

unsupported operand type(s) for /: 'QueryDict' and 'float' 

在「量」傳遞的值是4.90,所以我很困惑爲什麼這不可以 /。

class OrderForm(forms.Form): 
    amount = forms.FloatField() 
    credits = forms.FloatField() 

def __init__(self, amount, *args, **kwargs): 
    super(OrderForm, self).__init__(*args, **kwargs) 
    self.fields['amount'].widget = forms.HiddenInput() 
    self.fields['amount'].initial = amount 
    total_credits = credit_total(amount) 

    self.fields['credits'].widget = forms.HiddenInput() 
    self.fields['credits'].initial = total_credits 

我試過使用float(),但是這沒有奏效。

CAL功能

def credit_total(amount): 

    credit_total = amount/0.049 
    return credit_total 

我必須指出,在我它的作品形式的第一負載...

cost_amount = float(request.POST['amount']) 
     form = OrderForm(amount=cost_amount) 

然而,在後當我再次填寫表單,它不....

if request.method == 'POST': 
     form = OrderForm(request.POST) 

但是考慮現在是在POST請求。

也許我需要做一些事情,像這樣....

def __init__(self, amount=None, *args, **kwargs): 
     super(OrderForm, self).__init__(*args, **kwargs) 

     if amount is none then make amount from args = ammount???? 
+1

我在您發佈的代碼中的任何地方都看不到'/'。 –

+1

更新的問題請參見 – Prometheus

+0

爲什麼要投票結束?請告訴我如何導入這個問題?我已經包含了我所擁有的一切,並解釋了我已經完成的工作。 – Prometheus

回答

1

當您從request.POST填充表單時,您將傳遞整個request.POST作爲amount,這是表單的__init__的第一個參數。你想通過它作爲data。你仍然需要的東西傳遞給amount

if request.method == 'POST': 
    amount = float(request.POST.get('amount', 0)) 
    OrderForm(amount=amount, data=request.POST) 

 

我認爲這將是更好地爲您計算初​​始數據的形式之外:

class OrderForm(forms.Form): 
    amount = forms.FloatField(widget=forms.HiddenInput) 
    credits = forms.FloatField(widget=forms.HiddenInput) 

... 

form = OrderForm(initial={'amount': amount, 'credits': credit_total(amount)}) 

... 

if request.method == 'POST': 
    form = OrderForm(data=request.POST) 

過得好量當方法不是POST時,從request.POST開始?我希望你能發表你的觀點。

+0

好吧,我現在看到!這使得很多感覺!非常感謝。 – Prometheus

1

的問題是在你的def __init__(self, amount, *args, **kwargs):。這不是寫在許多地方,但你不能通過名稱將自己的參數添加到表單的__init__方法的參數列表中。

不過不要擔心,一切都不會丟失。你想要的是:

def __init__(self, *args, **kwargs): 
    amount = kwargs.pop('amount', None) 
    super(OrderForm, self).__init__(*args, **kwargs) 
    self.fields['amount'].widget = forms.HiddenInput() 
    self.fields['amount'].initial = amount 
    total_credits = credit_total(amount) 

    self.fields['credits'].widget = forms.HiddenInput() 
    self.fields['credits'].initial = total_credits 

唯一的是,你需要小心,當實例化你的表單。您將需要提供數額作爲一個命名的參數,我看你已經在做。

原因是,當您致電form = OrderForm(request.POST)時,您正在將POST QueryDict分配給amount參數。

相關問題