Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在使用Django将文件上载到数据库时添加其他数据字段_Python_Django_Upload_Metadata_Models - Fatal编程技术网

Python 在使用Django将文件上载到数据库时添加其他数据字段

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

我是新来的,也不熟悉Django和任何类型的web开发。 现在,我正在做一个项目,允许用户提交学术论文供其他用户编辑。 我遇到的问题是,我想让用户上传一个文件,并与该文件一起,上传一些关于文件元数据的数据?如标题栏提示所列的论文标题等。 我已经能够找到关于如何只上传文件的答案,而不是关于如何上传数据和整个文件包的答案

如果有人能解释这一点,那将对我帮助很大

以下是models.py:

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!这正是我所需要的。现在,为了确保我正确理解,它是否将表单中的所有数据作为一个对象上传到数据库中?我可以访问这个元信息,对吗?再次感谢。这真的很有用