# encoding=utf-8 import base64 import random import string from django.core.files.base import ContentFile from django.db import models class FileManager(models.Manager): def upload_as_base64(self, file_base64): key = ''.join(random.choice(string.ascii_letters) for _x in range(15)) if "data:" in file_base64: my_str = file_base64[file_base64.index("base64,") + 7:] ext = my_str.split('/')[-1] file = self.create(key, original=ContentFile(base64.b64decode(my_str), name='time.' + ext)) return file raise ValueError() class File(models.Model): key = models.CharField(max_length=15, verbose_name="Внешний ключ", unique=True, editable=False) original = models.FileField(max_length=255, verbose_name='Файл', upload_to="files") name = models.CharField(max_length=255, null=True, blank=True, verbose_name='Видимое имя файла') objects = FileManager() def __str__(self): return '%s' % self.original class Meta: verbose_name = 'Файл' verbose_name_plural = 'Файлы' class Comment(models.Model): email = models.CharField(verbose_name="email автора", max_length=63) text = models.TextField(default="", verbose_name="Текст комментария") files = models.ManyToManyField(to=File, blank=True, verbose_name='Файлы') key = models.SlugField(unique=True, verbose_name="Получения комментария по ключу") date = models.DateTimeField(auto_now_add=True, verbose_name="Дата коментария") def __str__(self): return '%s' % self.key class Meta: verbose_name = 'Коммент' verbose_name_plural = 'Комменты'