我想在动态中设置选择。
我使用__set_choices方法但是,当请求方法是POST时, is_valid方法总是返回False。
if request.method=='POST': _form = MyForm(request.POST) if _form.is_valid(): #something to do
答案 0 :(得分:17)
我经常在构造函数中动态获取选择:
class MyForm(BaseForm):
afield = forms.ChoiceField(choices=INITIAL_CHOICES)
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['afield'].choices = my_computed_choices
答案 1 :(得分:3)
关键是要意识到choices
可以是任何可迭代的:
import uuid
from itertools import count
class MyForm(BaseForm):
counter = count(1)
@staticmethod
def my_choices():
yield (uuid.uuid1, next(counter))
afield = forms.ChoiceField(choices=my_choices)
或者my_choices
中你喜欢的任何逻辑。
答案 2 :(得分:2)
在视图中,您可以执行以下操作
- views.py
lstChoices = _getMyChoices()
form.fields['myChoiceField'].choices = lstChoices
其中lstChoices是动态生成的元组列表供您选择。
答案 3 :(得分:0)
与maersu的解决方案类似,但是如果你有一个ModelForm,其模型对另一个模型有一个ForeignKey,你可能想要分配给该字段的查询集而不是选择。