【发布时间】: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