2017-05-03 47 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 
相关问题