【问题标题】:Django form not populating with POST dataDjango 表单未填充 POST 数据
【发布时间】:2023-02-02 22:52:41
【问题描述】:

我对 Django 比较陌生,所以希望这是一个非常简单的问题。我发现调试很困难,也许这是我这里问题的一部分。

问题:Django 表单似乎没有填充发布数据。

概括:我有2个模型实体休息时间.休息时间与 FK 关系实体编号(不是PK)上实体模型。

我想为所有字段生成一个空表单休息时间.生成基本表单会填充所有空字段,但对于 FK,它会生成一个包含所有 PK 的下拉列表实体桌子。这没有帮助,所以我在下面的 ModelForm 中排除了它,并尝试用所有的列表替换entity_ids实体桌子。此表单按预期呈现。

class BreakForm(ModelForm):   
    class Meta:
        model = Breaks
        #fields = '__all__'
        exclude = ('entity',)
    
    def __init__(self, *args, **kwargs):        
        super(BreakForm, self).__init__(*args, **kwargs)         
        self.fields['entity_id'] = ModelChoiceField(queryset=Entities.objects.all().values_list('entity_id', flat=True))    

下面的FormView就是URL调用的cbv。如下所示,如果我填充表单,以及 FK 列实体编号选择其中一个值,表单将不会提交。通过表单模板上的该字段,将出现以下消息选择一个有效的选项。该选项不是可用选项之一.

class ContactFormView(FormView):
    template_name = "breaks/test/breaks_form.html"
    form_class = BreakForm

我最初的想法是这个字段的数据类型(字符串/整数)是错误的,或者 Django 需要实体表(无论出于何种原因)。

所以我向 FormView 添加了一个 post 函数,可以看到 request.body 正在正确填充。但是我无法弄清楚如何将其填充到 ModelForm 中并保存到数据库中,或者如何克服上述问题。

【问题讨论】:

    标签: python django django-models django-views django-forms


    【解决方案1】:

    在 Django 中,作为参数传递给视图的请求对象有一个名为“方法”的属性,其中设置了请求的类型,并且可以通过请求访问通过 POST 传递的所有数据。邮政字典。该视图将显示通过登录发布的登录表单的结果。 HTML。

    【讨论】:

      【解决方案2】:

      我认为您的问题有两个方面,首先是没有正确呈现下拉列表,其次是表格没有保存。对于第一个问题,您不需要在ModelChoiceField 查询集中做任何更改,而是添加to_field_name

      class BreakForm(ModelForm):   
          class Meta:
              model = Breaks
              #fields = '__all__'
          
          def __init__(self, *args, **kwargs):        
              super(BreakForm, self).__init__(*args, **kwargs)         
              self.fields['entity_id'] = ModelChoiceField(queryset=Entities.objects.all(), to_field_name='entity_id')
      

      其次,如果你想保存表单,而不是 FormView,使用CreateView

      class ContactFormView(CreateView):
          template_name = "breaks/test/breaks_form.html"
          form_class = BreakForm
          model = Breaks
      

      【讨论】:

        猜你喜欢
        • 2012-11-10
        • 2012-08-14
        • 2018-02-27
        • 2018-06-13
        • 1970-01-01
        • 2019-07-11
        • 1970-01-01
        • 2011-06-12
        • 2014-06-11
        相关资源
        最近更新 更多