Skip to content

Instantly share code, notes, and snippets.

@pimiento
Created May 16, 2023 10:55
Show Gist options
  • Save pimiento/d2d178669091d27c757c571ea3fbeb4c to your computer and use it in GitHub Desktop.
Save pimiento/d2d178669091d27c757c571ea3fbeb4c to your computer and use it in GitHub Desktop.
from django.contrib.auth import get_user_model
from django.db import models
from django.urls import reverse
from django.utils import timezone
User = get_user_model()
class BaseModel(models.Model):
is_published = models.BooleanField(
default=True,
verbose_name='Опубликовано',
help_text='Снимите галочку, чтобы скрыть публикацию.')
created_at = models.DateTimeField(auto_now_add=True,
verbose_name='Добавлено')
class Meta:
abstract = True
class Category(BaseModel):
HELP_TEXT = ('Идентификатор страницы для URL; разрешены символы '
'латиницы, цифры, дефис и подчёркивание.')
title = models.CharField(max_length=256, verbose_name='Заголовок')
description = models.TextField(default='', verbose_name='Описание')
slug = models.SlugField(
unique=True,
verbose_name='Идентификатор',
help_text=HELP_TEXT
)
class Meta:
verbose_name = 'категория'
verbose_name_plural = 'Категории'
def __str__(self):
return self.title
class Location(BaseModel):
name = models.CharField(max_length=256, verbose_name='Название места')
class Meta:
verbose_name = 'местоположение'
verbose_name_plural = 'Местоположения'
def __str__(self):
return self.name
class Post(BaseModel):
HELP_TEXT = ('Если установить дату и время в будущем —'
' можно делать отложенные публикации.')
title = models.CharField(max_length=256, verbose_name='Заголовок')
text = models.TextField(verbose_name='Текст')
pub_date = models.DateTimeField(
default=timezone.now,
verbose_name='Дата и время публикации',
help_text=HELP_TEXT
)
author = models.ForeignKey(
User,
on_delete=models.CASCADE,
verbose_name='Автор публикации'
)
location = models.ForeignKey(
Location,
verbose_name='Местоположение',
on_delete=models.SET_NULL,
related_name='Post',
null=True,
blank=True,
)
category = models.ForeignKey(
Category,
verbose_name='Категория',
on_delete=models.SET_NULL,
related_name='Post',
null=True,
blank=False,
)
image = models.ImageField(
'Изображение', upload_to='posts_images', blank=True)
class Meta:
ordering = ('pub_date',)
verbose_name = 'публикация'
verbose_name_plural = 'Публикации'
def get_absolute_url(self):
return reverse('blog:posts', kwargs={'pk': self.pk})
def __str__(self):
return self.title[:32]
class Comment(models.Model):
text = models.TextField('Текст комментария')
post = models.ForeignKey(
Post,
on_delete=models.CASCADE,
related_name='comment',
)
author = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True,
verbose_name='Добавлено')
class Meta:
ordering = ('created_at',)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment