Django rest framework APITestCase, включая поля файлов
Как написать тест для следующего фрагмента кода? У меня проблемы с обработкой файлов. В папке media создаются лишние файлы, а также тест не работает должным образом. Поиск оказался бесполезным
# models.py
class Book(models.Model):
title = models.CharField(max_length=255, unique=True)
author = models.ForeignKey(Author, related_name='books', on_delete=models.CASCADE)
description = models.TextField(verbose_name='about book', blank=True, null=True, max_length=2000)
cover = models.ImageField(default='ebook_pictures/default.png')
slug = models.SlugField(unique=True)
pdf = models.FileField(validators=[FileExtensionValidator(['pdf'])])
genres = models.ManyToManyField(Genre, related_name='books', blank=True)
# serializers.py
class BookSerializer(ModelSerializer):
book_detail_url = HyperlinkedIdentityField(view_name='book-detail', lookup_field='slug', read_only=True)
class Meta:
model = Book
fields = '__all__'
extra_kwargs = {'slug': {'read_only': True}, }
# views.py
class BookViewSet(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
lookup_field = 'slug'
permission_classes = [IsAdminOrReadOnly]
filter_backends = [filters.SearchFilter]
search_fields = ['title', ]
# urls.py
router = DefaultRouter()
router.register(r'books', BookViewSet, basename='book')
# settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media/'
# tests.py
class BookViewSetTestCase(APITestCase):
def test_book_create(self):
pass
Если вы не хотите, чтобы файлы создавались, вам следует поиздеваться над файловым хранилищем Django. Эта статья немного устарела, но может указать вам правильное направление:
https://joeray.me/mocking-files-and-file-storage-for-testing-django-models