Python 在使用Django将文件上载到数据库时添加其他数据字段
我是新来的,也不熟悉Django和任何类型的web开发。 现在,我正在做一个项目,允许用户提交学术论文供其他用户编辑。 我遇到的问题是,我想让用户上传一个文件,并与该文件一起,上传一些关于文件元数据的数据?如标题栏提示所列的论文标题等。 我已经能够找到关于如何只上传文件的答案,而不是关于如何上传数据和整个文件包的答案 如果有人能解释这一点,那将对我帮助很大 以下是models.py:Python 在使用Django将文件上载到数据库时添加其他数据字段,python,django,upload,metadata,models,Python,Django,Upload,Metadata,Models,我是新来的,也不熟悉Django和任何类型的web开发。 现在,我正在做一个项目,允许用户提交学术论文供其他用户编辑。 我遇到的问题是,我想让用户上传一个文件,并与该文件一起,上传一些关于文件元数据的数据?如标题栏提示所列的论文标题等。 我已经能够找到关于如何只上传文件的答案,而不是关于如何上传数据和整个文件包的答案 如果有人能解释这一点,那将对我帮助很大 以下是models.py: from django.db import models class Document(models.Mode
from django.db import models
class Document(models.Model):
docfile = models.FileField(upload_to='documents/%Y/%m/%d')
titleField = models.CharField(max_length=100, default="")
dueDateField = models.IntegerField(default=10)
classNumField = models.IntegerField(default=0)
promptField = models.CharField(max_length=300, default="")
下面是上传文件的函数。我理解这一部分的工作原理,但它是从表单上传附加数据,这让我感到困惑:
views.py
def list(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile = request.FILES['docfile'])
newdoc.save()
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('ReadMyPaper.myapp.views.list'))
else:
form = DocumentForm() # A empty, unbound form
# Load documents for the list page
documents = Document.objects.all()
# Render list page with the documents and the form
return render_to_response(
'myapp/list.html',
{'documents': documents, 'form': form},
context_instance=RequestContext(request)
)
您使用的是模型表单吗?如果否,则如何创建一个:
# forms.py
from django import forms
from .models import Document
class DocumentForm(forms.ModelForm):
class Meta:
model = Document
在这两种情况下,如何正确使用它:
# views.py
from .forms import DocumentForm
def document_list(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
new_doc = form.save()
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('ReadMyPaper.myapp.views.list'))
else:
form = DocumentForm() # A empty, unbound form
# Load documents for the list page
documents = Document.objects.all()
# Render list page with the documents and the form
return render_to_response(
'myapp/list.html',
{'documents': documents, 'form': form},
context_instance=RequestContext(request)
)
第一点:Django表单非ModelForm表单做两件事:
它们显示它们的字段,然后
他们对数据进行清理和验证。
因此,在使用Djago表单时,您不必访问request.POST或request.GET。在极少数情况下,您可以直接使用GET表单,只访问form.u数据
第二点:模型形式也知道
如何基于关联模型创建它们自己的字段,但您可以手动和手动限制/覆盖这些字段
根据已验证的数据创建或更新模型实例。
因此,在使用ModelForm时,至少对于最常见的用例,您甚至不必对视图中的模型本身做任何事情。您也可以发布DocumentForm的代码吗?谢谢您,Bruno!这正是我所需要的。现在,为了确保我正确理解,它是否将表单中的所有数据作为一个对象上传到数据库中?我可以访问这个元信息,对吗?再次感谢。这真的很有用