【发布时间】:2016-07-28 06:37:39
【问题描述】:
我正在尝试使用 django 表单上传文件并将这些文件保存在数据库本身中。 我已经能够将文件的链接保存在数据库中,并将文件本身保存在我在 Media_root 中指定的目录中。请你帮我告诉我我可以在我的代码中更改什么,以便将文件保存在数据库中.
这是我的代码:
models.py
>from django.db import models
class Document(models.Model):
docfile = models.FileField(upload_to='documents/%Y/%m/%d')
forms.py
>from django import forms
class DocumentForm(forms.Form):
docfile = forms.FileField(
label='Select a file',
)
views.py
>from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from .models import Document
from .forms import DocumentForm
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('upload.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(
'list.html',
{'documents': documents, 'form': form},
context_instance=RequestContext(request)
)
def index(request):
return render_to_response('index.html')
app\urls.py
>from django.conf.urls import patterns, include, url
from django.conf import settings
from django.conf.urls.static import static
from django.views.generic import RedirectView
from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('',
(r'^upload/', include('upload.urls')),
(r'^$', 'upload.views.index'),
(r'^admin/', include(admin.site.urls)),) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
项目\urls.py
>from django.conf.urls import patterns, include, url
urlpatterns = patterns('upload.views',
url(r'^$', 'list', name='list'),
url(r'^list/$', 'list', name='list'),)
【问题讨论】:
-
有一些库 - like this one - 提供数据库存储后端。
-
@solarissmoke 我看过这个 github 页面,但是我该如何使用它?
-
不要在数据库中保存文件。为此使用文件系统。
-
@mirosval 我必须这样做。我想不想做都无所谓。
-
@superconductor 阅读文档?