Как передать содержимое файла в текстовое поле модели django?
Есть модель для иконок:
class Icon(models.Model):
name = models.CharField(max_length=50)
icon = models.FileField(upload_to='icons/', blank=True, null=True)
inline_svg = models.CharField(max_length=1000, default=???)
Файлы иконок преимущественно .svg формата, я хочу в поле inline_svg передавать содержимое соответствующего файла icon, чтобы на фронте использовать inline svg, а не <img src>. Подскажите как это реализовать?
Была идея сделать что-то подобное:
class Icon(models.Model):
def svg(self):
f = open(self.icon.url)
return f.read()
name = models.CharField(max_length=50)
icon = models.FileField(upload_to='icons/', blank=True, null=True)
inline_svg = models.CharField(max_length=1000, default=svg())
код неверный.
Можно, конечно, получать содержимое файла через javascript, но мне кажется это как-то некрасиво(возможно не прав)
Ответы (1 шт):
Автор решения: Naur
→ Ссылка
Переопределяем метод save():
class Icon(models.Model):
name = models.CharField(max_length=50)
icon = models.FileField(upload_to='icons/', blank=True, null=True)
inline_svg = models.CharField(max_length=1000, default='')
def save(self, *args, **kwargs):
if self.icon.name.endswith('.svg'):
self.inline_svg = self.icon.read()
super().save(*args, **kwargs)