python Django表单未填充POST数据

ozxc1zmp  于 2023-02-02  发布在  Python
关注(0)|答案(2)|浏览(178)

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

**问题:**Django表单似乎没有填充帖子数据。
**摘要:**我有2个模型 * 实体 * 和 * 分段 分段 * 与 * 实体 * 模型上的 entity_id(不是PK)具有FK关系。

我想为 Breaks 的所有字段生成一个空表单。生成基本表单会填充所有空字段,但对于FK,它会生成一个 Entities 表的所有PK的下拉列表。这没有帮助,因此我已在下面的ModelForm中将其排除,并尝试替换为 Entities 表的所有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列entity_id选择其中一个值,则表单将不会提交。表单模板上的该字段旁将显示以下消息 * 请选择有效选项。该选项不是可用选项之一 *。

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

我最初的想法是这个字段的数据类型(string/integer)是错误的,或者Django需要 Entities 表中行的PK(不管什么原因)。
所以我在FormView中添加了一个post函数,可以看到request.body被正确地填充,但是我无法解决如何将其填充到ModelForm中并保存到数据库中,或者克服上面提到的问题。
任何帮助都将不胜感激

hec6srdp

hec6srdp1#

在Django中,作为参数传递给视图的request对象有一个名为“method”的属性,其中设置了请求的类型,所有通过POST传递的数据都可以通过request.POST字典访问。视图将显示通过loggedin.html发布的登录表单的结果。

rryofs0p

rryofs0p2#

我认为您的问题有两个方面,第一个是下拉列表没有正确显示,第二个是表单没有保存。对于第一个问题,您不需要对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')

其次,如果要保存窗体,请使用CreateView而不是FormView:

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

相关问题