2017-05-03 2 views
1

In meinem Modell möchte ich einen Validator verwenden, um den Inhalt einer Datei zu analysieren, die Sache, die ich nicht herausfinden kann, ist, wie man auf den Inhalt der Datei zugreifen kann Datei wurde noch nicht gespeichert (was gut ist), wenn die Validatoren laufen.Wie man Validatoren auf FileField Inhalt verwendet

Ich verstehe nicht, wie man die Daten vom "value" zum Validator in eine Datei (ich nehme an, ich sollte tempfile verwenden) bekomme, damit ich es dann öffnen und die Daten auswerten kann.

Hier ist ein vereinfachtes Beispiel, in meinem realen Code möchte ich die Datei öffnen und mit csv auswerten.

in 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()]) 

Danke für die Hilfe!

Antwort

1

Werfen Sie einen Blick, wie dies in der ImageField Umsetzung erfolgt:

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 
:

So Ihre ValidateFile Klasse so etwas wie dies auch sein mag