Add package files

This commit is contained in:
2022-06-20 11:53:11 +03:00
parent 37b3fed091
commit 1dfa7b36b3
15 changed files with 251 additions and 52 deletions

131
extend/models.py Normal file
View File

@@ -0,0 +1,131 @@
from datetime import datetime
from django.db import models
from django.contrib.auth.models import User
from django.utils.safestring import mark_safe
from mptt.models import MPTTModel, TreeForeignKey
from pytils.translit import slugify
from model_utils import Choices
from easy_thumbnails.files import get_thumbnailer
from easy_thumbnails.fields import ThumbnailerImageField
class Category(MPTTModel):
name = models.CharField(
"Название", unique=True, max_length=100
)
slug = models.SlugField(
"Путь",
null=True,
blank=True,
unique=True,
max_length=100,
)
parent = TreeForeignKey(
"self",
on_delete=models.CASCADE,
null=True,
blank=True,
related_name="children",
)
class MPTTMeta:
order_insertion_by = ["name"]
class Meta:
abstract = True
verbose_name = "Категория"
verbose_name_plural = "Категории"
ordering = ["name"]
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.name)
super().save(*args, **kwargs)
class Tag(models.Model):
name = models.CharField(
"Название", unique=True, max_length=100
)
slug = models.SlugField(
"Путь",
null=True,
blank=True,
unique=True,
max_length=100,
)
class Meta:
abstract = True
verbose_name = "Метка"
verbose_name_plural = "Метки"
ordering = ["name"]
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.name)
super().save(*args, **kwargs)
class Photo(models.Model):
user = models.ForeignKey(User, null=True, on_delete=models.SET_NULL, verbose_name="Пользователь")
title = models.CharField("Название", blank=True, max_length=255)
image = ThumbnailerImageField(
"Фото", upload_to="photos/", max_length=255, default="", resize_source=dict(size=(825, 825), sharpen=True)
)
created = models.DateTimeField("Создано", default=datetime.now)
updated = models.DateTimeField("Изменено", auto_now=True)
class Meta:
abstract = True
verbose_name = "Фотография"
verbose_name_plural = "Фотографии"
ordering = ["id"]
def __str__(self):
return self.title
def image_tag(self):
if self.image:
options = {'size': (100, 100), 'upscale': True}
thumb_url = get_thumbnailer(self.image).get_thumbnail(options).url
return mark_safe('<img src="%s"/>' % thumb_url)
else:
return 'Изображение отсутствует'
image_tag.short_description = 'Превью'
class Comment(models.Model):
user = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
text = models.TextField("Текст")
created = models.DateTimeField(
"Создано", auto_now_add=True
)
updated = models.DateTimeField(
"Изменено", auto_now=True
)
STATUS = Choices(
("moderation", "На модерации"),
("published", "Опубликовано"),
)
status = models.CharField(
choices=STATUS,
default=STATUS.moderation,
max_length=20,
)
class Meta:
abstract = True
verbose_name = "Комментарий"
verbose_name_plural = "Комментарии"
ordering = ["-created"]
def __str__(self):
return f'{self.created} {self.user.username}'