我正在尝试使用来自Db对象的数据预填充表单字段。如何设置表单,视图和模型以使用此数据填充字段?
目标是让用户只选择从对象查询的数据。防爆。一个事件有乐队演奏,用户从事件中选择他们喜欢的乐队。
我尝试查看form.data的文档 - 但似乎无法找到我正在寻找的内容。
谢谢!
答案 0 :(得分:4)
假设您的Events模型的band为Many-2-Many键,表单和视图的布局如下:
forms.py:
class EditEventForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(EditEventForm, self).__init__(*args, **kwargs)
self.fields['bands'].queryset= \
Bands.objects.filter(Q(name='band1')|Q(name='band2'))
class Meta:
model = Event
注意:您需要根据需要调整表单中的查询集提取。
views.py:
form = EditEventForm(instance=event)
此外,根据dcrodjer提出的建议,请继续阅读有关实施ModelMultipleChoiceField的文字
答案 1 :(得分:1)
您可以通过将参数传递给表单
来获得更多自定义class SelectBandForm(forms.Form):
def __init__(self, event, *args, **kwargs):
super(EditEventForm, self).__init__(*args, **kwargs)
self.fields['bands'] = forms.ModelChoiceField(label="Whats your favorite band?",
empty_label="Select a Band" , querset=Bands.objects.filter(event=event))
然后在你的观点中
if request.method =="POST":
form = SelectBandForm(event, request.POST)
if form.is_valid():
#do stuff
else:
form = SelectBandForm(event)
#show it