Django /:';QueryDict&x27;和';浮动';

Django /:';QueryDict&x27;和';浮动';,django,django-forms,Django,Django Forms,我得到以下错误: unsupported operand type(s) for /: 'QueryDict' and 'float' “amount”中传递的值是4.90,所以我不明白为什么它不能/ class OrderForm(forms.Form): amount = forms.FloatField() credits = forms.FloatField() def __init__(self, amount, *args, **kwargs): sup

我得到以下错误:

unsupported operand type(s) for /: 'QueryDict' and 'float'
“amount”中传递的值是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(),但这不起作用

校准函数

def credit_total(amount):

    credit_total = amount / 0.049
    return credit_total
我必须注意,在我第一次加载表单时,它是有效的

 cost_amount = float(request.POST['amount'])
        form = OrderForm(amount=cost_amount)
然而,在post上,当我再次填充表单时,它不会

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????

问题在于您的
def\uuuu init\uuu(self、amount、*args、**kwargs):
。这不是在很多地方写的,但是您不能按名称将自己的参数添加到表单的
\uuuu init\uuu
方法的参数列表中

不过别担心,一切都没有失去。你想要的是:

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
唯一的问题是,在实例化表单时需要小心。您需要以命名arg的形式提供金额,我看到您已经在这样做了


原因是,当您调用
form=OrderForm(request.POST)
时,您将POST QueryDict分配给
金额
参数。

当您从
request.POST
填充表单时,您将整个
请求.POST
作为
金额传递,哪个是表单的
\uuuu init\uuuu
的第一个参数。您希望将其作为数据传递。您仍然需要将某些内容传递给
金额

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时,您如何从
请求.POST
中获取金额?我希望你已经发布了你的整个视图。

我在你发布的代码中没有看到
/
。更新的问题请查看为什么投票结束?请告诉我如何导入此问题?我已经包括了我所拥有的一切,并解释了我已经做了什么。