使用Db数据填充Django表单字段数据

时间:2011-01-20 05:54:06

标签: python django django-views django-forms

我正在尝试使用来自Db对象的数据预填充表单字段。如何设置表单,视图和模型以使用此数据填充字段?

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

我尝试查看form.data的文档 - 但似乎无法找到我正在寻找的内容。

谢谢!

2 个答案:

答案 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