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
中获取金额?我希望你已经发布了你的整个视图。我在你发布的代码中没有看到/
。更新的问题请查看为什么投票结束?请告诉我如何导入此问题?我已经包括了我所拥有的一切,并解释了我已经做了什么。