2017-05-03 55 views
1

使用驗證器在我的模型,我想用一個驗證器來分析文件的內容,我想不通的事情是如何訪問文件的內容通過它的解析文件尚未保存(這是好的)當驗證器運行時。如何在FileField或內容

我不理解如何從傳遞到驗證到一個文件中的「價值」獲取數據(我假設我應該使用臨時文件),這樣的話我可以打開它,並評估數據。

這裏有一個簡單的例子,在我真正的代碼,我想打開該文件,並與CSV評估。

在Models.py

class ValidateFile(object): 
    .... 
    def __call__(self, value): 
     # value is the fieldfile object but its not saved 
     # I believe I need to do something like: 
     temp_file - tempfile.TemporaryFile() 
     temp_file.write(value.read()) 
     # Check the data in temp_file 
    .... 

class MyItems(models.Model): 
    data = models.FileField(upload_to=get_upload_path, 
          validators=[FileExtensionValidator(allowed_extensions=['cv']), 
          ValidateFile()]) 

感謝您的幫助!

回答

1

看看這是如何在ImageField實施完成:

所以你ValidateFile類可能是這樣的:

from io import BytesIO 

class ValidateFile(object): 

    def __call__(self, value): 
     if value is None: 
      #do something when None 
      return None 

     if hasattr(value, 'temporary_file_path'): 
      file = value.temporary_file_path() 
     else: 
      if hasattr(value, 'read'): 
       file = BytesIO(value.read()) 
      else: 
       file = BytesIO(value['content']) 

     #Now validate your file 
相關問題