|
查看: 1311|回复: 1
|
關於Django 的上傳功能
[复制链接]
|
|
|
最近為了新的case ,學了python的web framework - django ,
可是,在Upload 檔案上 server的時候出了問題, 檔案過去了, 可是 居然沒存到database裡面
form 似乎沒有form.save()的功能,
讓我很困惑, 到底是我的form 語法錯誤, 還是說下面的這段code 本身就不是寫來存到database的。
希望有大大可以解答 Q_Q
form 也加了 <form method="POST" action="/xxx/bom/save/" enctype="multipart/form-data" > {% csrf_token %}
MEDIA_ROOT 也設成了/tmp
Models.py
- from django.db import models
- from django.contrib.auth.models import User
- from django.forms import ModelForm
- from django import forms
- from django.core.files.uploadedfile import SimpleUploadedFile
- class Documents(models.Model):
- code = models.CharField(max_length=200)
- name = models.CharField(max_length=200)
- description = models.TextField()
- mimetype = models.CharField(max_length=200)
- owner = models.ForeignKey(User, related_name="note_created_by_user")
- created_at = models.DateTimeField()
- archive_reason = models.CharField(max_length=200)
- archive_by = models.ForeignKey(User, related_name="note_created_by_archive")
-
- def __unicode__(self):
- return self.name
-
- class DocumentsForm(ModelForm):
- class Meta:
- model = Documents
- exclude = ('owner', 'archive_by',)
- class DocumentHistory(models.Model):
- document = models.ForeignKey(Documents)
- created_at = models.DateTimeField(max_length=200)
- version = models.CharField(max_length=200)
- status = models.CharField(max_length=200)
-
- def __unicode__(self):
- return self.document
-
- class VersionControl(models.Model):
- document = models.ForeignKey(Documents)
- file_size = models.IntegerField()
- created_at = models.DateTimeField()
- version = models.CharField(max_length=200)
- path = models.FileField(upload_to='upload/',blank=True,null=True)
- description = models.TextField()
- user = models.ForeignKey(User)
-
- def __unicode__(self):
- return self.description
- class VersionControlForm(forms.Form):
- document = models.CharField()
- file_size = forms.CharField(max_length=200)
- created_at = forms.DateTimeField()
- version = forms.CharField(max_length=200)
- path = forms.FileField()
- description = forms.CharField()
- user_id = models.CharField()
复制代码
Views.py
- from django import forms
- from django.contrib.auth.models import User
- from dms.documents.models import Documents,DocumentsForm,VersionControlForm
- from dms.documents.models import VersionControlForm
- from django.forms.formsets import formset_factory
- from django.forms.models import modelformset_factory
- from django.shortcuts import render_to_response
- from django.http import HttpResponse
- from django.http import HttpResponseRedirect
- from django.shortcuts import render_to_response
- from datetime import date
- from django.core.context_processors import csrf
- def say(request):
- return HttpResponse("Test Say.")
-
- def document_manage(request):
- DocumentsFormSet = formset_factory(DocumentsForm)
- data = {
- 'form-TOTAL_FORMS': u'2',
- 'form-INITIAL_FORMS': u'0',
- 'form-MAX_NUM_FORMS': u'',
- }
-
- if request.method == 'GET':
- form = DocumentsForm(request.GET)
- if form.is_valid():
- form.save()
- else:
- form=DocumentsForm()
- return render_to_response('bom.html',{
- 'form':form,
- })
-
- def version_control(request):
- if request.method == 'POST':
- form = VersionControlForm(request.POST, request.FILES)
- form.user_id = User.objects.get(pk=request.session.get('_auth_user_id'))
- form.document = User.objects.get(pk=request.session.get('_auth_user_id'))
- if form.is_valid():
-
- handle_uploaded_file(request.FILES['path'])
- return HttpResponseRedirect('/DMS/bom/')
- else:
- form = VersionControlForm()
- return render_to_response('document.html',{'form':form})
- def handle_uploaded_file(f):
- destination = open('tmp/upload/%s'%f.name, 'wb+')
- for chunk in f.chunks():
- destination.write(chunk)
- destination.close()
复制代码 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 10-6-2011 03:57 PM
|
显示全部楼层
啊 , 成功了= =
用ModelForm 來做, 不要用Forms.Form 來做就可以了。
不過, 有人知道不用ModelForms , 直接用Forms 做得出來的方法嗎@@? |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|