Django 为forms.Form\uu init添加其他初始化参数__
我正在创建一个表单,并希望添加一个动态参数,如下所示:Django 为forms.Form\uu init添加其他初始化参数__,django,django-forms,Django,Django Forms,我正在创建一个表单,并希望添加一个动态参数,如下所示: from django import forms def get_quantity_choices(avail_qty): return [(i, str(i)) for i in range(1, avail_qty)] class QuantityForm(forms.Form): def __init__(self, request, avail_qty, *args, **kwargs):
from django import forms
def get_quantity_choices(avail_qty):
return [(i, str(i)) for i in range(1, avail_qty)]
class QuantityForm(forms.Form):
def __init__(self, request, avail_qty, *args, **kwargs):
self.avail_qty_choices = get_quantity_choices(avail_qty)
quantity = forms.TypedChoiceField(
choices=avail_qty_choices,
coerce=int)
这样我就可以这样做了
form = QuantityForm(request.POST, available_quantity)
其中,available\u quantity
是在我的应用程序的其他地方动态生成的变量
但我一直收到这个错误消息“未定义的名称可用数量选择”
我做错了什么?这不是
选项的工作方式。当您启动服务器时,在解释类时初始化类属性。它出现在\uuuu init\uuu
方法下的事实并不相关
您可以让超级构造函数完成这项工作,然后更改quantity
字段的选择。最初,您可以将选项设置为空列表,例如:
from django import forms
class QuantityForm(forms.Form):
quantity = forms.TypedChoiceField(choices=[], coerce=int)
def __init__(self, *args, avail_qty=None, **kwargs):
super().__init__(*args, **kwargs)
self.fields['quantity'].choices = get_quantity_choices(avail_qty)
来自django导入表单的
类QuantityForm(forms.Form):
quantity=forms.TypedChoiceField(选项=[],强制=int)
定义初始值(self,*args,avail\u qty=None,**kwargs):
super()
self.fields['quantity'].choices=获取数量选择(avail数量)
谢谢。我试过你推荐的方法。它起作用了。但是设置self.fields['quantity'].choices=get\u quantity\u choices(avail\u quantity)
会给我一个错误int对象没有属性'get'
。但更改为该选项将有效self.fields['quantity']=forms.TypedChoiceField(选项=get\u quantity\u选项(avail\u quantity),强制=int)