Сохранение изображений в ImageField, которые сканируются фоновой задачей - PullRequest
1 голос
/ 30 октября 2019

У меня есть программа, работающая в фоновом режиме, которая выводит изображения в определенную папку на моем сервере, и это может происходить через разные промежутки времени. Мне нужно иметь возможность показывать эти изображения в шаблоне, поэтому я хочу сохранить их в БД, используя ImageField.

Мой вопрос: как мне сохранить их в БД? Могу ли я просто сделать что-то вместе с os.listdir(dir) для фоновой задачи и сохранить это непосредственно в БД, или ему нужен полный путь к образу?

Я уже создал модель для этой

class Usertasks(models.Model):
    TaskID = models.CharField(max_length=55)
    user = models.ForeignKey(User, unique=False, on_delete=models.CASCADE)
    TaskStatus = models.CharField(max_length=15, default="missing")
class TaskImages(models.Model):
    UserTasks = models.ForeignKey(Usertasks, related_name='images', on_delete=models.CASCADE)
    image = models.ImageField()

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Да, вы можете просто пройтись по каталогу и сохранить каждый файл в модели:

from django.core.files import File

with open('path_to_file', 'rb') as f: 
    data = File(f)
    TaskImages.image.save('filename', data, True)

Возможно, что хитрее, когда вы собираетесь вызвать это сохранение, и как часто вы собираетесь это делать? Это?

0 голосов
/ 30 октября 2019
import sys, os
print('Python %s on %s' % (sys.version, sys.platform))

import django
print('Django %s' % django.get_version())

sys.path.append('<path to your project>')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PROJECTNAME.settings')
if 'setup' in dir(django):
   django.setup()
print('Django Start!')

...
Imagine you are in a view and make your normal script, 
generating the images and    saving them to templates.
...

Посмотрите, сможете ли вы понять приведенный выше код, вы в основном запустите его и сможете загрузить все необходимые шаблоны. Я обычно работаю с таким кодом в скриптах и ​​в той же директории, что и manage.py.

PS: Очевидно, вы можете удалить отпечатки, я оставляю, потому что в Jupyter помогает мне визуализировать, когда ноутбук перестает работать.

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