【发布时间】:2011-06-12 05:59:09
【问题描述】:
我正在尝试使用来自 Db 对象的数据预填充表单字段。您如何设置表单、视图和模型来用这些数据填充字段?
目标是让用户只选择从对象中查询的数据。前任。一个活动有乐队演奏,用户从参加活动的乐队中选择他们最喜欢的乐队。
我尝试查看 form.data 的文档 - 但似乎找不到我要查找的内容。
谢谢!
【问题讨论】:
标签: python django django-views django-forms
我正在尝试使用来自 Db 对象的数据预填充表单字段。您如何设置表单、视图和模型来用这些数据填充字段?
目标是让用户只选择从对象中查询的数据。前任。一个活动有乐队演奏,用户从参加活动的乐队中选择他们最喜欢的乐队。
我尝试查看 form.data 的文档 - 但似乎找不到我要查找的内容。
谢谢!
【问题讨论】:
标签: python django django-views django-forms
假设您的 Events 模型将带区设置为 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 的一些文本
【讨论】:
您可以通过将参数传递给表单来获得更多自定义
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
【讨论】: