【问题标题】:Uploading A file in django with ModelForms使用 ModelForms 在 django 中上传文件
【发布时间】:2013-03-28 14:07:00
【问题描述】:

我已经研究这个项目好几个小时了,只是不知道如何创建一个简单的文件上传应用程序。我查看了所有教程,但没有一个完全适用于我的情况,我只是无法正确获取代码。我知道此时我拥有的代码不会运行,但我希望有人能够用我所拥有的东西将我推向正确的方向。我知道这不是很好,但我很沮丧,我希望有人能帮助我,尤其是我的意见。py 非常感谢。先感谢您!

Models.py

from django.db import models
from django.contrib.auth.models import User
from django.forms import ModelForm


class WorkSheet(models.Model):
    worksheet_name = models.CharField(max_length= 150, default = True)
    creator = models.ForeignKey(User, default = True)
    worksheet_file = models.FileField(upload_to = 'worksheets', default = True)
    number_of_stars = models.PositiveIntegerField(default = True)
    category = models.CharField(max_length = 100, default = 0)


class UploadWorkSheetForm(ModelForm):
    class Meta:
        model = WorkSheet

Views.py

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


from models import WorkSheet
from forms import UploadWorkSheetForm

def upload(request):
    template = 'upload.html'
    if request.method == 'POST':
        if 'file' in request.FILES:
            file = request.FILES['file']
            filename = file['filename']
            fd = open('%s/%s' % (settings.MEDIA_ROOT, filename), 'wb')
            fd.write(file['content'])
            fd.close()

            return http.HttpResponseRedirect('upload_success.html')
    else:
        form = UploadWorkSheetForm()
        return render_to_response(template, {'form': form})

    return render(request, 'upload.html', {'form': form})

上传.html

<!DOCTYPE html>
<html>
<head>
    <title>WSD Upload</title>
</head>
<body>
<h1>Upload WorkSheet</h1>
{% block body %}
<form action="." method="post" enctype="multipart/form-data"> {{ form }}
    <type="submit" value = "Upload"/>
</form>
{% endblock %}
</body>
</html>

如果您还有什么需要,请告诉我。谢谢谢谢谢谢!

【问题讨论】:

  • 是有错误还是只是没有按照您的意愿行事?

标签: html django django-models django-forms django-views


【解决方案1】:

views.py

def upload(request):
    template = 'upload.html'
    if request.method == 'POST':
        form = UploadWorkSheetForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()

            return HttpResponseRedirect('upload_success.html') <---change this to your valid url not template name
    else:
        form = UploadWorkSheetForm()

    return render(request, 'upload.html', {'form': form})

模板

...................        
{% block body %}
<form action="." method="post" enctype="multipart/form-data"> 
    {% csrf_token %}    
    {{ form.as_p }}
    <input type="submit" value = "Upload"/>
</form>
{% endblock %}
....................

【讨论】:

  • 如果您还有其他问题,请告诉我
  • 谢谢,这正是我所需要的!还有一个问题,我没有看到一个可以“提交”这个的按钮,即使有一个 form.save() 是它只是没有出现在我的浏览器中还是 html/模板没有在那里放置一个按钮?再次感谢
  • 这是按钮&lt;input type="submit" value = "Upload"/&gt;,你不认识代码吗?
  • 我就是这么想的!但是由于某种原因它没有出现?我会重新检查我的代码
  • 是的,我只是忘记了开头的“输入”。很抱歉你真的帮了我这些愚蠢的问题!
猜你喜欢
  • 2011-09-21
  • 2013-10-09
  • 2019-09-20
  • 2011-06-12
  • 2011-03-18
  • 2021-01-01
相关资源
最近更新 更多