用数据库数据填充Django表单字段

8 投票
2 回答
4098 浏览
提问于 2025-04-16 10:17

我想要用数据库里的数据来预填一个表单字段。请问我该怎么设置表单、视图和模型,才能把这些数据填到字段里呢?

我的目标是让用户只能选择从这个对象中查询到的数据。例如,一个活动有几个乐队在演出,用户可以从这些乐队中选择他们最喜欢的一个。

我试着查阅文档中的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 的一些资料。

撰写回答