Редактирование содержимого файла FileField из Django Admin

У меня есть ситуация, когда у меня есть скрипты python, которые хранятся в виде файлов, которые необходимо изменять из панели администратора. В настоящее время некоторые из моих моделей могут иметь скрипты, прикрепленные к ним:

class Action(PolymorphicModel):
    title = models.CharField(max_length=100)
    text = BBCodeField('text', blank=True)
    action_script = models.FileField(upload_to='action_scripts')

В моей панели администратора я могу загрузить файл, но меня попросили сделать этот файл редактируемым на месте, если у пользователя есть соответствующие права. Я искал идиоматический способ сделать это, и на данный момент у меня есть следующие идеи:

  1. Override the FileField widget to include an text edit box and save button. This seems very brute forced
  2. Replace models.FileField with subclass of models.TextField, implement read from file, save to file, but then I lose the upload widget and data still gets stored in DB. This seems dirty because in the database all I'm storing is a filename. FileField feels like the right field type here.
  3. Write a custom ModelForm that includes forms.TextField. Handle save to file using the save method. I'm not sure how to accomplish this because I would have to generate a filename on the fly and I don't have a primary key yet. Maybe some sort of UUID?

Сейчас я склоняюсь к двери номер 3, но я использую Django всего неделю, поэтому я не уверен, что это правильный путь, или даже как это сделать.

Дальнейшие осложнения:

  • Не все Action нуждаются в скриптах. Если текстовое поле пустое, FileField может просто стать Null.
  • Action подклассифицируется в несколько производных классов. Функциональность редактирования должна распространяться на админ-панель каждой модели масштабируемым способом, как и другие поля.
  • .

Этот вопрос кажется достаточно общим, чтобы его решение было полезным для тех, кто хочет редактировать HTML или CSS из админки и т.д., как это делает WordPress. Поиск в этом направлении, к сожалению, приводит к результатам, связанным со скинами администратора, что мне не нужно. В моей ситуации я пытаюсь избежать хранения кода python в базе данных по соображениям безопасности. Интерфейс администратора не будет открыт для конечных пользователей, поэтому теоретически он должен быть безопасным, и я получаю преимущества кэширования, компиляции и локальности (меньше обращений к БД).

Большое спасибо.

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