Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Связывание файла сгенерированного на сервере и FileField. [RSS Feed]

#1 Окт. 31, 2010 20:58:12

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Связывание файла сгенерированного на сервере и FileField.

У меня стоит две схожих задачи:
1) записать некий текст из БД в файл связанный с FileField
2) связать сгенерированный сервером файл (архив) с FileField

Стандартное FieldFile.save требует наличия chunks, которые у строки и питоновского файла отсутствуют.
Что посоветуете делать в данной ситуации?
Переходить на FilePathField не очень бы хотелось…



Офлайн

#2 Окт. 31, 2010 22:07:58

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Связывание файла сгенерированного на сервере и FileField.

Решил пока так:

from django.core.files import File
import os

f = open(tmp_path, 'w')
f.write(some_text)
f.close()
f = open(tmp_path)
dj_f = File(f)
model_object.file.save('file', dj_f)
f.close()
os.remove(tmp_path)
Но хотелось бы всё же как-нибудь по красивее…



Офлайн

#3 Ноя. 1, 2010 09:46:47

Doberman26rus
От: Ставрополь
Зарегистрирован: 2009-03-16
Сообщения: 128
Репутация: +  1  -
Профиль   Отправить e-mail  

Связывание файла сгенерированного на сервере и FileField.

fth
Решил пока так:
from django.core.files import File
import os

f = open(tmp_path, 'w')
f.write(some_text)
f.close()
f = open(tmp_path)
dj_f = File(f)
model_object.file.save('file', dj_f)
f.close()
os.remove(tmp_path)
Но хотелось бы всё же как-нибудь по красивее…
f = open(tmp_path, 'w')
f.write(some_text)
f.close()
setattr(model_object, 'file', tmp_path)
model_object.save()
Создавай файл сразу в папке ‘upload_to’ так ты избежишь лишнего копирования.
os.remove(tmp_path) - этого делать не надо=)



подпись

Офлайн

#4 Ноя. 1, 2010 20:10:50

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Связывание файла сгенерированного на сервере и FileField.

Благодарю!

И небольшое исправление, должно быть так:

path = grt_file_path(model_object)
f = open(MEDIA_ROOT + path, 'w')
f.write(some_text)
f.close()
setattr(model_object, 'file', path)
model_object.save()
Иначе файл не будет виден наружу.



Отредактировано (Ноя. 2, 2010 18:51:42)

Офлайн

  • Начало
  • » Django
  • » Связывание файла сгенерированного на сервере и FileField.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version