2017-05-03 4 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 
関連する問題