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.
49 lines
1.7 KiB
49 lines
1.7 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, 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 = 'Комменты'
|
|
|