佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1310|回复: 1

關於Django 的上傳功能

[复制链接]
发表于 10-6-2011 02:23 PM | 显示全部楼层 |阅读模式
最近為了新的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

  1. from django.db import models
  2. from django.contrib.auth.models import User
  3. from django.forms import ModelForm
  4. from django import forms
  5. from django.core.files.uploadedfile import SimpleUploadedFile

  6. class Documents(models.Model):
  7.     code = models.CharField(max_length=200)
  8.     name = models.CharField(max_length=200)
  9.     description = models.TextField()
  10.     mimetype = models.CharField(max_length=200)
  11.     owner = models.ForeignKey(User, related_name="note_created_by_user")
  12.     created_at = models.DateTimeField()
  13.     archive_reason = models.CharField(max_length=200)   
  14.     archive_by = models.ForeignKey(User, related_name="note_created_by_archive")
  15.    
  16.     def __unicode__(self):
  17.         return self.name
  18.    

  19. class DocumentsForm(ModelForm):
  20.     class Meta:
  21.         model = Documents
  22.         exclude = ('owner', 'archive_by',)

  23. class DocumentHistory(models.Model):
  24.     document = models.ForeignKey(Documents)
  25.     created_at = models.DateTimeField(max_length=200)
  26.     version = models.CharField(max_length=200)
  27.     status = models.CharField(max_length=200)
  28.    
  29.     def __unicode__(self):
  30.         return self.document
  31.         
  32. class VersionControl(models.Model):
  33.     document = models.ForeignKey(Documents)
  34.     file_size = models.IntegerField()
  35.     created_at = models.DateTimeField()
  36.     version = models.CharField(max_length=200)
  37.     path = models.FileField(upload_to='upload/',blank=True,null=True)
  38.     description = models.TextField()
  39.     user = models.ForeignKey(User)
  40.    
  41.     def __unicode__(self):
  42.         return self.description


  43. class VersionControlForm(forms.Form):
  44.     document = models.CharField()
  45.     file_size = forms.CharField(max_length=200)
  46.     created_at = forms.DateTimeField()
  47.     version = forms.CharField(max_length=200)
  48.     path = forms.FileField()
  49.     description = forms.CharField()
  50.     user_id = models.CharField()
复制代码





Views.py
  1. from django import forms
  2. from django.contrib.auth.models import User
  3. from dms.documents.models import Documents,DocumentsForm,VersionControlForm
  4. from dms.documents.models import VersionControlForm
  5. from django.forms.formsets import formset_factory
  6. from django.forms.models import modelformset_factory
  7. from django.shortcuts import render_to_response
  8. from django.http import HttpResponse
  9. from django.http import HttpResponseRedirect
  10. from django.shortcuts import render_to_response
  11. from datetime import date
  12. from django.core.context_processors import csrf


  13. def say(request):
  14.     return HttpResponse("Test Say.")



  15.                
  16. def document_manage(request):
  17.     DocumentsFormSet = formset_factory(DocumentsForm)
  18.     data = {
  19.         'form-TOTAL_FORMS': u'2',
  20.         'form-INITIAL_FORMS': u'0',
  21.         'form-MAX_NUM_FORMS': u'',

  22.     }
  23.    
  24.     if request.method == 'GET':

  25.         form = DocumentsForm(request.GET)

  26.         if form.is_valid():
  27.             form.save()
  28.     else:
  29.         form=DocumentsForm()
  30.     return render_to_response('bom.html',{
  31.         'form':form,
  32.     })       

  33.    
  34. def version_control(request):
  35.     if request.method == 'POST':
  36.         form = VersionControlForm(request.POST, request.FILES)
  37.         form.user_id = User.objects.get(pk=request.session.get('_auth_user_id'))
  38.         form.document = User.objects.get(pk=request.session.get('_auth_user_id'))
  39.         if form.is_valid():
  40.             
  41.             handle_uploaded_file(request.FILES['path'])
  42.             return HttpResponseRedirect('/DMS/bom/')
  43.         else:
  44.             form = VersionControlForm()
  45.         return render_to_response('document.html',{'form':form})

  46. def handle_uploaded_file(f):
  47.     destination = open('tmp/upload/%s'%f.name, 'wb+')
  48.     for chunk in f.chunks():
  49.         destination.write(chunk)
  50.     destination.close()   
复制代码
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 10-6-2011 03:57 PM | 显示全部楼层
啊 , 成功了= =
用ModelForm 來做, 不要用Forms.Form 來做就可以了。



不過, 有人知道不用ModelForms  ,  直接用Forms 做得出來的方法嗎@@?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT


本周最热论坛帖子本周最热论坛帖子

ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 13-11-2025 11:40 PM , Processed in 0.125281 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表