Django: сохранить ContentFile (или какой-то виртуальный файл) в базу данных
В моем приложении django я создаю строку, которую я должен сохранить в своей базе данных в виде файла. Если я правильно понимаю, django должен автоматически загружать файл при сохранении записи:
class Foo(models.Model):
bar1=models.ForeignKey(Table1)
bar2=models.ForeignKey(Table2)
res=models.FileField(upload_to='MYPATH')
Проблема в том, что для создания экземпляра Foo мне нужно сначала создать физический файл на диске сервера, что означало бы, что будут созданы две копии (одна для меня, чтобы создать запись в базе данных, одна для django при сохранении записи.).
Насколько я вижу, я должен сам создать файл в 'MYPATH', и вместо использования FileField, я должен сохранить ссылку в базе данных (по сути, что делает django????). Однако я сомневаюсь, что это лучший метод, как
- Это не кажется мне питонским.
- У меня не будет доступа к тем же методам, что и при использовании реального FileField. Например, при его вызове у меня не будет FieldFile, а будет только строка ссылки.
По сути, я хотел сделать следующее: String -> ContentFile (или некоторая форма "виртуального" файла) -> Physical File, обрабатываемый Django при сохранении записи в базе данных.
entry = Foo(bar1=var1, bar2=var2, res=ContentFile(XMLSTRING))
entry.save()
Это не работает, но показывает, чего я хочу достичь. Итак, пожалуйста, покажите мне одно из следующих трех:
- Как сохранить файл в базе данных без его физического создания (использование ContentFile не создает физический файл после сохранения записи, что я и хочу сделать)
- Заставьте django не загружать данный файл, а использовать уже загруженную версию, сохраняя при этом все методы, предоставляемые FileField
- Что я не понимаю
Я прошу прощения за [мой английский, мое непонимание, отсутствие ясности]
Все, что вам нужно знать, я с удовольствием уточню.
РЕДАКТИРОВАТЬ: Я посмотрел на эту тему, но там, urlretrieve создает временный файл, что я не хочу делать. Может быть, я должен сделать это, но есть ли лучший способ?