2011-01-20 185 views
7

我想用一个Db对象的数据预填充表单字段。如何设置表单,视图和模型以填充此数据的字段?用Db数据填充Django表单字段数据

目标是让用户只选择从对象查询的数据。防爆。一个事件有乐队演奏,用户从事件中选择他们最喜欢的乐队。

我试图寻找form.data的文档 - 但似乎无法找到我在找什么。

谢谢!

回答

4

假设你的活动模式有乐队为许多-2-许多关键的表单和视图布局将如下所示:

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

一些文字,你可以通过参数来获得多一点的定制表单

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