class Group(models.Model):
title = models.CharField(max_length=200, verbose_name='Жанр')
slug = models.SlugField(max_length=255, unique=True, verbose_name='Параметр')
description = models.TextField(verbose_name='Содержание')
def __str__(self):
return self.title
class Meta:
verbose_name = 'Жанр'
verbose_name_plural = 'Жанры'
ordering = ('title',)
class Post(models.Model):
text = models.TextField(verbose_name='Текст поста', help_text='Введите текст поста')
pub_date = models.DateTimeField(auto_now_add=True, verbose_name='Дата публикации')
group = models.ForeignKey('Group', blank=True, null=True, on_delete=models.SET_NULL,
related_name='posts', verbose_name='Группа', help_text='Группа, относительно поста')
author = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='posts', verbose_name='Автор')
def __str__(self):
return self.text[:15]
class Meta:
verbose_name = 'Пост'
verbose_name_plural = 'Посты'
ordering = ('-pub_date', 'author')
class PostModelTest(TestCase):
@classmethod
def setUpClass(self):
super().setUpClass()
self.user = User.objects.create_user(username='auth')
self.group = Group.objects.create(title='Тестовая группа',
slug='Тестовый слаг',
description='Тестовое описание',)
self.post = Post.objects.create(author=cls.user,
text='Тестовое описание поста',)
def test_title_label(self):
'''Проверка заполнения verbose_name'''
field_verboses = {'text': 'Текст поста',
'pub_date': 'Дата публикации',
'group': 'Группа',
'author': 'Автор'}
for field, expected_value in field_verboses.items():
with self.subTest(field=field):
error_name = f'Поле {field} ожидало значение {expected_value}'
self.assertEqual(
self.post._meta.get_field(field).verbose_name,
expected_value, error_name)
def test_title_help_text(self):
'''Проверка заполнения help_text'''
field_help_texts = {'text': 'Введите текст поста',
'group': 'Группа, относительно поста'}
for field, expected_value in field_help_texts.items():
with self.subTest(field=field):
error_name = f'Поле {field} ожидало значение {expected_value}'
self.assertEqual(
self.post._meta.get_field(field).help_text,
expected_value, error_name)
def test_models_have_correct_object_names(self):
'''Проверка длины __str__ post'''
error_name = f"Вывод не имеет {settings.LEN_OF_POSTS} символов"
self.assertEqual(self.post.__str__(),
self.post.text[:settings.LEN_OF_POSTS],
error_name)