Как извлечь текст из загруженного файла, чтобы заполнить поле модели Django? - PullRequest
1 голос
/ 02 июня 2011

Я пишу приложение Django, для которого потребуется объект Script, который имеет доступ как к файлу, содержащему скрипт, так и к полному тексту скрипта.Файл сценария представляет собой файл xls, и у меня нет проблем с извлечением данных из него или записью данных в него программно (xlrd и друзья замечательные!), И я храню его в models.FileField.Я хотел бы сохранить полный текст в файлах models.TextField, но моя проблема в том, что я не знаю, как правильно соединить рабочий процесс, чтобы полный текст и сохраненный файл отражали друг друга.

Рабочие процессы Iwant:

Создан объект сценария -> файл загружен в поле файла -> текст извлечен из файла, сохраненного в поле полнотекста

и

Отредактирован полный текст сценария -> текст записан обратнофайл в поле файла -> сценарий сохранен

и

Файл сценария заменен новым файлом -> текст извлечен из файла, сохраненного в поле полного текста

Я играл скаркас сигналов (presave и postsave), но я не знаю, как это сделать, т. е. сохранить изменения, на которые я надеюсь, поскольку это потребовало бы вызова save-> генерации бесконечного цикла.Кроме того, предварительная загрузка, кажется, вызывается до того, как файл загружен (с помощью формы), что заставляет мой сервер ругаться на меня.

Есть идеи?

1 Ответ

0 голосов
/ 24 октября 2011

Оказывается, я перерабатывал эту проблему. Сигнал, который я на самом деле искал, был post_init, а функция, которую я написал, буквально просто

@receiver(post_save, sender=Script)
def retrieve_fulltext(sender, **kwargs):
    script = kwargs['instance']
    s = open(script.script.path)
    text = s.read()

    if script.fulltext == text:
        return else: script.fulltext = text
        script.save()

Что еще, да, требует немного больше, чтобы заставить его работать с изменениями в полнотекстовом режиме, инициирующими запись в файл. Извините, ТАК, что задал глупый вопрос. Надеюсь, этот ответ хотя бы пригодится кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...