from django.core.urlresolvers import reverse from django.db import models from django.utils import timezone def photo_filename(instance, filename): from slugify import slugify_filename return 'photo_uploads/' + slugify_filename(filename) class News(models.Model): created = models.DateTimeField('Дата и время', auto_now_add=True, editable=False) title = models.CharField('Заголовок', max_length=512, null=False, blank=False, unique=True) slug = models.SlugField('Ссылка', max_length=512, null=False, blank=False, unique=True) text = models.TextField('Новость', null=False, blank=False) is_public = models.BooleanField('Публиковать', default=True) image = models.ImageField('Картинка', upload_to=photo_filename) tags_list = models.ManyToManyField('NewsTag', blank=True) class Meta: verbose_name = 'новость' verbose_name_plural = 'новости' def __str__(self): return self.title def get_absolute_url(self): return reverse('news_detail', args=(self.slug,)) class NewsTag(models.Model): title = models.CharField('Заголовок', max_length=512, null=False, blank=False, unique=True) slug = models.SlugField('Ссылка', max_length=512, null=False, blank=False, unique=True) news_list = models.ManyToManyField(News, blank=True) class Meta: verbose_name = 'тег' verbose_name_plural = 'теги' def __str__(self): return self.title class NewsComment(models.Model): created = models.DateTimeField('Дата и время', auto_now_add=True, editable=False) name = models.CharField('Имя', max_length=45, null=False, blank=False) email = models.EmailField('Email (не будет опубликован)', null=False, blank=False) text = models.TextField('Комментарий', null=False, blank=False) reply_to = models.ForeignKey('self', null=True, blank=True) news = models.ForeignKey(News, related_name='comments') class Meta: verbose_name = 'комментарий' verbose_name_plural = 'комментарии' def __str__(self): return '{}: {}'.format(self.name, self.news.title)