You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

48 lines
1.6 KiB

# 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)
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="Получения комментария по ключу")
def __str__(self):
return '%s' % self.key
class Meta:
verbose_name = 'Коммент'
verbose_name_plural = 'Комменты'