2011-11-29 48 views
0

我有不同的類別,如English,French,我已經申請keylanguage = models.ForeignKey(Category)我想在文件上傳到磁盤之前驗證文件。 我想如果類別是english然後文件上傳到english/album_name如果類別是french然後文件上傳到french/album_name。我寫了forms.py文件。但不知道。在此先感謝驗證文件上傳之前

Models.py

class Artist(models.Model): 
    name = models.CharField(max_length=100) 
    slug = models.SlugField(unique = True,max_length=100,help_text="Suggested value automatically generated from name. Must be unique.") 

class Album(models.Model): 
    name = models.CharField(max_length=100) 
    slug = models.SlugField(unique = True,max_length=100,help_text="Suggested value automatically generated from name. Must be unique.") 
    path = models.CharField(max_length=100,null=True, blank=True) 
    language = models.ForeignKey(Category) 
    albumid = models.CharField(max_length=100) 

class Song(models.Model): 
    title = models.CharField(max_length=100) 
    artist = models.ManyToManyField(Artist) 
    music = models.ForeignKey(Music) 
    album = models.ForeignKey(Album) 
    file = models.FileField(upload_to='media/mp3_files') 

forms.py

from django import forms 
from db.song.models import Song 

class SongAdminForm(forms.ModelForm): 
    class Meta: 
     model = Song 
    # No idea what to do next :-? 
    def clean_file(self): 
     file = self.cleaned_data["file"] 
     if file: 
      if file._size > 10*1024*1024: 
      raise ValidationError("Audio file too large (> 10mb)") 
      if not file.content-type in ["audio/mpeg","audio/..."]: 
       raise ValidationError("Content-Type is not mpeg") 
+0

「我想在文件上傳到磁盤之前驗證它」如何?該文件只能通過實際檢查字節來驗證。如何在沒有上傳到可以檢查字節的計算機上的情況下檢查字節? –

回答

0

我想你真正想要的是上傳後對其進行驗證,但在保存之前真的。

上傳文件時,它們位於臨時文件夾中,因此您可以在將其保存到適當的文件夾之前進行所有需要的檢查。但是,如果您確實需要預上傳檢查,則必須使用Javascript(因爲它是客戶端)。但是,不要忘記你應該「永遠不要相信用戶輸入」,並且包括Javascript所做的事情,因爲用戶可以更改Javascript代碼。

+0

好的謝謝,如果類別是英文,那麼文件上傳到英文/專輯名稱如果類別是法文,然後文件上傳到法文/ album_name,我想要什麼。我寫了forms.py文件。' – Kulbir

+0

我認爲這裏的第一個代碼塊是你需要的:https://docs.djangoproject.com/en/dev/topics/http/file-uploads/ –