【问题标题】:Passing an additional field through a model form without adding it to the model通过模型表单传递附加字段而不将其添加到模型中
【发布时间】:2021-07-24 20:38:03
【问题描述】:

我试图弄清楚如何在不将字段添加到模型本身的情况下将字段添加到模型表单。我只需要将这个额外的字段传递给它返回的视图。

我的 django 项目有一个页面,用户在其中上传一个文本文件,该文件保存到数据库中(文件上传表单是模型表单)。然后它返回一个页面,其中显示了文本文件中的重要内容。我想在与文件上传表单相同的页面上添加一个下拉列表,允许用户选择一个选项,用于在返回下一页时如何显示内容。我不希望这个下拉列表成为文本文件模型的一部分,因为我不需要将它保存到数据库中。我无法弄清楚如何将此选项传递到视图而不将其添加到模型本身。

上传表格:

<form method="POST" enctype="multipart/form-data" id="text-upload-form">  
    {% csrf_token %}  
    {{ form.as_p }} 
        <label for="display-type">Display type</label>
        <select id="display-type" name="display-type" form="text-upload-form">
            <option value="highlighted">Highlighted display</option>
            <option value="dark">Dark display</option>
        </select>

    <button type="submit" class="save btn btn-default">Save</button>  
</form>  

Views.py

def parser(request):
    if request.method =='POST':
        text_upload = TextFileForm(request.POST, request.FILES)
        if text_upload.is_valid():
            text_file = request.FILES
            handle_text_upload(request.FILES['file'])
            model_instance = text_upload.save()
            t = model_instance.file.path
            f = open(t, 'r')
            context ={
                't': t
            }
        return render(request, 'Parser/results.html', context)
    else:
        text_file_form = TextFileForm()
        return render(request, 'Parser/parser.html', {'form': text_file_form})

模型形式

class TextFile(forms.ModelForm):
    class Meta:
        model = TextFile
        fields = "__all__"

有没有办法做到这一点,还是将 Display 属性添加到模型本身会更好?

【问题讨论】:

  • 覆盖modelform中的表单初始化

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


【解决方案1】:

您可以通过在 class Meta 之前添加字段来简单地做到这一点

class TextFile(forms.ModelForm):
    additionField = forms.CharField()
    class Meta:
        model = TextFile
        fields = "__all__"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多