Тестовая модель Django с FilerImageField

Все новички в Django, я хочу написать тесты для IndexView и DetailView по аналогии с учебником Джанго.

У меня есть модель, которая содержит FilerImageField как обязательное поле (blank=False).

Чтобы проверить мои представления, связанные с этой моделью, я хочу создать экземпляр модели программно.

Я знаю об этом вопросе о том, как создать FilerImageField в коде. Проблема, с которой я сталкиваюсь, применяя предполагаемое решение, заключается в том, чтобы правильно понять владельца изображения.

def create_exhibitor(name, image_path, active):
    filename = 'file'
    user = User.objects.get(username='myuser')
    with open(image_path) as f:
        file_obj = File(f, name=filename)
        image = Image.objects.create(
            owner=user,
            original_filename=filename,
            file=file_obj
        )

        return Exhibitor(name=name, image=image, active=active)

Запуск их тестов дает:

Traceback (most recent call last):
...
DoesNotExist: User matching query does not exist.

Мне кажется, что нет пользователя в тестовой базе данных.

Так что мой вопрос действительно двойной:

Нужен ли там пользователь для создания экземпляра модели, содержащей FilerImageField?

Если да, то как мне создать его для целей тестирования?

1 ответ

Я наконец делаю это так:

from django.test import TestCase
from django.contrib.auth.models import User
from django.core.files.uploadedfile import SimpleUploadedFile
from .models import Exhibitor

class TestCase():
    su_username = 'user'
    su_password = 'pass'

    def setUp(self):
        self.superuser = self.create_superuser()

    def create_superuser(self):
        return User.objects.create_superuser(self.su_username, 'email@example.com', self.su_password)

    def create_exhibitor(self):
       name = 'eins'
       active = True
       image_file = SimpleUploadedFile(
        'monkey.jpg', b'monkey', content_type="image/jpeg"
       )
       return Exhibitor(name=name, image=image_file, active=active)
Другие вопросы по тегам