Модель изображения 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 в соответствии со связанным объектом: Вот возможный дублирующий поток, который отвечает на ваш вопрос.