Сохраняйте ImageField в разные папки
У меня есть две модели, которые наследуются от базовой модели следующим образом
'''
games = [
('DND5E', 'Dungeons and Dragons'),
('TOR20', 'Tormenta20'),
]
class BaseSheet(models.Model):
...
game: str = models.CharField(default='', max_length=5, choices=games)
...
class DnDMonster(BaseSheet):
...
image = models.ImageField(upload_to='images/monsters/DnD5e')
...
class Tor20Monster(BaseSheet):
...
image = models.ImageField(upload_to='images/monsters/Tor20')
...
'''
По моему мнению, так будет лучше организовано, и я смогу размещать изображения из разных игр в разных папках, а не в одной огромной папке со всем, что в ней находится
У меня есть некоторые проблемы, когда я хочу, чтобы мой клиент видел все, что наследуется от BaseSheet и их изображения, поэтому я хочу поместить это ImageField в BaseSheet. Когда я пытаюсь это сделать, кажется, что я не могу поместить изображения в разные папки в зависимости от того, какая игра у монстра. Есть ли способ сделать это? Есть ли лучший способ сделать это?
Я не уверен, будет ли это работать. Но если вы добавите поле изображения в базовую модель, но будете создавать новые объекты только в модели вашего подкласса, это, вероятно, может сработать:
def image_upload_path(instance, filename):
if isinstance(instance, DnDMonster):
return 'images/monsters/DnD5e/{0}'.format(filename)
if isinstance(instance, Tor20Monster):
return 'images/monsters/Tor20/{0}'.format(filename)
return 'images/monsters/somefallbackpath/{0}'.format(filename)
class BaseSheet(models.Model):
...
image = models.ImageField(upload_to=image_upload_path)
...