为什么我的 Django 文件提交没有发布?

Why is my django file submission not posting?

我正忙于构建一个会议网站应用程序,该应用程序需要能够上传文章。这些文章还应该能够分配给审阅者以供下载和评分。我的问题来自文件的上传。我不确定我做错了什么,但我认为我的表单提交的数据不正确,因为它没有通过 'if form.is_valid:' 部分 运行。我在这方面还是个初学者。我看过很多教程。

这是我的 model.py 文件的样子:

from django.db import models
from time import time

def get_upload_file_name(instance, filename):
    return "uploaded_files/%s_%s" % (str(time()).replace('.','_'), filename)

class Article(models.Model):
    title = models.CharField(max_length=50)
    abstract = models.TextField()
    pub_date = models.DateTimeField('Date published')
    ffile = models.FileField(upload_to=get_upload_file_name)

    def __str__(self):
        return "%s" % (self.title)

这是我的 admin.py 文件:

from django.contrib import admin
from .models import Article

admin.site.register(Article)

这是我的 forms.py 文件:

from django import forms
from .models import Article

class ArticleForm(forms.ModelForm):

    class Meta:
        model = Article
        fields = ('title','abstract','pub_date','ffile')

这是我的 views.py 文件:

from django.shortcuts import render, render_to_response
from django.http import HttpResponseRedirect

from .forms import ArticleForm

def upload_article(request):
    if request.method == 'POST':
        form = ArticleForm(request.POST, request.FILES)
        if form.is_valid():
            instance = ArticleForm(file_field=request.FILES[''])
            form.save()
            instance.save()

            return HttpResponseRedirect('/articles/')

    else: 
        form = ArticleForm()

    return render_to_response('submit/form.html', {'form' : form})

然后是我的 HTML 模板:

{% extends 'base.html' %}

{% block content %}

    <form method="post" action="../upload/" enctype="multipart/form-data"> {% csrf_token %}

        {{form.as_p}}
        <input type="submit" value="Submit" />

    </form>


{% endblock %}

我的网址没有问题..有人可以帮助我吗?或者至少建议一个第三方应用程序可以使这更容易?

我可以 post 不上传文件的普通表单,但我似乎无法获取此表单。

好的,所以我找到了发布问题的解决方案。

models.py

from django.db import models
from django.forms import ModelForm
from time import time

# Function to determine where to place uploaded documents 
# Taken from youtube tutorial: https://www.youtube.com/watch?v=b43JIn-OGZU&index=15&list=PLxxA5z-8B2xk4szCgFmgonNcCboyNneMD

def get_upload_file_name(instance, filename):
    # return a string: folder_name/time-of-upload + seperated by underscore + filename
    # Example: media_files/15-10-2015_Submission1
    return "uploaded_files/%s_%s" % (str(time()).replace('.','_'), filename)

class Document(models.Model):
    file = models.FileField( blank=False, null=True) 
    title = models.CharField(max_length=200, default=None)

    def __str__(self):
        return "%s" % self.title

class DocumentForm(ModelForm):
    class Meta:
        model = Document
        fields = ['title', 'file']

forms.py

from django import forms
from .models import Document

class UploadFileForm(forms.ModelForm): 
    title = forms.CharField(max_length=200)

    file = forms.FileField(
        label = 'Select a file',
        help_text = 'maximum file size: 50mb',
        allow_empty_file=False
    )

views.py

#@login_required
def upload_file(request):
    # Handle file upload
    if request.POST:
        form = DocumentForm(request.POST, request.FILES)
        #print(request.POST['title'], '   ', request.POST['file'])        
       # print(request.FILES['file'])        
        if form.is_valid():
            #newdoc = Document(title = request.FILES['title'])
            form.save()

            # Redirect to the document list after POST
            # return HttpResponseRedirect(reverse('submissions.views.upload_file'))
            return HttpResponseRedirect('/success/')
    else:
        form = DocumentForm()  #A empty, unbound form

    args = {}
    args.update(csrf(request))
    args['form'] = form
    return render_to_response('submissions/submission.html', args, context_instance=RequestContext(request))

所以问题之一是我必须在模型中创建一个 FileField,就像在表单中一样。