Django тестовое поле, из которого создается slug
Я пытаюсь написать test
для UpdateView
из Model
, у которого есть title
и slug
. Когда я пытаюсь test
свою view
, я не могу получить response
, потому что save
метод выбрасывает ошибку
ОШИБКА
Reverse for 'books-delete' with arguments '('',)' not found. 1 pattern(s) tried: ['delete/(?P<slug>[^/]+)$']
Я понимаю, что slug не может быть пустым, и это то, что я пытаюсь проверить. Итак, шаг за шагом:
МОДЕЛЬ
from django.utils.text import slugify
class Book(models.Model):
title = models.CharField(max_length=120)
slug = models.SlugField(max_length=120, unique=True, blank=True)
def __str__(self) -> str:
return f'{self.title}'
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
return super().save(*args, **kwargs)
ТЕСТ
class BookUpdateTest(TestCase):
def test_book_must_have_title(self):
"""Create book object and updates fields with wrong data"""
book = Book.objects.create(title='Camera Work 2')
response = self.client.post(
reverse('books-update', kwargs={'slug': book.slug}), {'title': '',})
self.assertEqual(response.status_code, 200)
ОБНОВИТЬ ПРЕДСТАВЛЕНИЕ
class BookUpdateView(UpdateView):
model = Book
fields = '__all__'
success_url = '/'
template_name = 'books/book_update.html'
URL PATTERNS
urlpatterns = [
path('update/<str:slug>', BookUpdateView.as_view(), name='books-update'),
path('delete/<str:slug>', BookDeleteView.as_view(), name='books-delete')
]
Как должен выглядеть тест для поля title
?