Протестируйте модель Django, которая использует request.user в save_model - PullRequest
1 голос
/ 17 апреля 2020

У меня есть модель Django, которая переопределяет save_model для автоматического сохранения текущего аутентифицированного пользователя в поле при сохранении.

Вопрос в том, как в модульном тесте я могу проверить создание этой модели без необходимости go в виде?

Модель:

class SomeClass(models.Model):
    def save_model(self, request, obj, form, change):
        self.prevent_update()

        if not obj.pk:
            # Only set added_by during the first save.

            obj.created = request.user
        super().save_model(request, obj, form, change)

Тест просто хочет настроить SomeClass перед выполнением каких-либо других действий.

class SomeClassTestCase(TestCase):

    def setUp(self):
        self.assertTrue(request.user)
        SomeClass.objects.create(name="abc")

Я знаю, что запрос устанавливается автоматически, так как request.user не завершается с request существо None; вместо этого ограничение запроса не выполняется, поскольку пользователь имеет значение null. Как настроить пользователя для запроса, который, по-видимому, был передан в save_model

В качестве альтернативы я знаю, что могу настроить запрос с помощью RequestFactory и сгенерировать пользователя. В таком случае, как я могу получить это в тесте, чтобы SomeClass.objects.create действительно его увидел.

1 Ответ

0 голосов
/ 19 апреля 2020

Благодаря комментариям я понял, что скопировал и плохо вставил, поместив save_model в модель. Это и мои способности любителя sh с Django вызвали все виды путаницы. Таким образом, тот факт, что request.user не был ошибочным, вызван тем, что он никогда не вызывался.

Теперь я правильно переопределяю метод save в модели и метод save_model в администраторе, который передает правильные детали к модели для сохранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...