Как прочитать данные файла из метода подкласса FileField в Django?

Я создаю пользовательское поле в Django:

from mysite.data_parsers import get_csv_data_as_dict
from mysite.validators import csv_file_validator
from django.db import models

class CSVFileField(models.FileField):
    default_validators = [csv_file_validator]

    def get_data_as_dict(self):
        # How do I read the file data here? 
        data = self.?
        return get_csv_data_as_dict(data)

Как прочитать filedata в методе?

Похоже, что это поможет:

from mysite.data_parsers import get_csv_data_as_dict
from mysite.validators import csv_file_validator
from django.db import models
from django.db.models.fields.files import FieldFile

class CSVFieldFile(FieldFile):
    def _get_file_data(self):
        try:
            FILE = self.open()
            return FILE.read()
        finally:
            FILE.close()

    def get_data_as_dict(self):
        data = self._get_file_data()
        return get_csv_data_as_dict(data)


class CSVFileField(models.FileField):
    default_validators = [csv_file_validator]
    attr_class = CSVFieldFile

Если кто-то знает какие-либо проблемы с этим подходом или знает лучший способ, пожалуйста, дайте мне знать. Мне особенно интересно знать, правильно ли я закрываю файл после его чтения.

PS. Да - это считывает весь файл в память, но файл CSV никогда не будет слишком большим, чтобы поместиться в памяти (по крайней мере, те, с которыми я работаю).

Вернуться на верх