用数据库数据填充Django表单字段
我想要用数据库里的数据来预填一个表单字段。请问我该怎么设置表单、视图和模型,才能把这些数据填到字段里呢?
我的目标是让用户只能选择从这个对象中查询到的数据。例如,一个活动有几个乐队在演出,用户可以从这些乐队中选择他们最喜欢的一个。
我试着查阅文档中的form.data,但似乎找不到我想要的内容。
谢谢!
2 个回答
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
4
假设你的事件模型(Events model)有一个多对多的关系,涉及到乐队(bands),那么表单和视图的布局会是这样的:
表单文件(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 的一些资料。