【问题标题】:Fill Django Form Field Data with Db Data用 Db 数据填充 Django 表单字段数据
【发布时间】:2011-06-12 05:59:09
【问题描述】:

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

目标是让用户只选择从对象中查询的数据。前任。一个活动有乐队演奏,用户从参加活动的乐队中选择他们最喜欢的乐队。

我尝试查看 form.data 的文档 - 但似乎找不到我要查找的内容。

谢谢!

【问题讨论】:

    标签: python django django-views django-forms


    【解决方案1】:

    假设您的 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 的一些文本

    【讨论】:

      【解决方案2】:

      您可以通过将参数传递给表单来获得更多自定义

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-10
        • 1970-01-01
        • 2011-03-06
        • 1970-01-01
        • 2012-08-14
        • 1970-01-01
        • 2016-06-17
        • 2023-02-02
        相关资源
        最近更新 更多