Модель изображения Django с динамической функцией upload_to с использованием общего отношения

Я создаю модель изображения, которая будет использоваться другими моделями через общие отношения. Например, новостные ленты и события будут иметь изображения. Ниже приведен пример модели изображения

class Image(models.Model):
   description = models.CharField(max_length=500, null=True, blank=True)
   image = models.ImageField(upload_to=get_storage_path)

   content_type=models.ForeignKey(ContentType,on_delete=models.CASCADE)
   object_id = models.PositiveIntegerField()
   content_object = GenericForeignKey()

Это сохранит изображение только в одном каталоге. Однако проблема в том, что я не могу понять, как я могу написать динамический upload_to функция, которая будет хранить изображения в соответствующих каталогах, например, images/news/ а также images/events,

2 ответа

Решение

upload_to обработчик принимает два аргумента, instance а также filename, Вы можете проверить instance чтобы выяснить, с каким типом контента связан объект:

def get_storage_path(instance, filename):
    # This is just an example - you'll need to use the right name
    # depending on the model class.
    if instance.content_type.model == 'news':
         # Generate filename here
    else:
         # Generate different file name here

Если вам нужно сохранить один файл в нескольких местах: Оформить заказ Django Custom Storages.

Если вам просто нужно динамически установить папку upload_to в соответствии со связанным объектом: Вот возможный дублирующий поток, который отвечает на ваш вопрос.

Другие вопросы по тегам