Как указано в ответе Уди , мы можем изучить собственные тесты ModelAdmin Джанго , чтобы определить основные ингредиенты для ModelAdmin
теста. Вот резюме:
Основные ингредиенты
В дополнение к Django TestCase
, основными ингредиентами являются:
Экземпляр AdminSite
:
from django.contrib.admin.sites import AdminSite
Ваш класс модели и соответствующий ModelAdmin
(под) класс:
from my_app.models import MyModel
from my_app.admin import MyModelAdmin
Опционально, в зависимости от ваших потребностей, (макет) запроса и / или формы.
Рецепт
Первые два ингредиента необходимы для создания экземпляра вашего (пользовательского) ModelAdmin
:
my_model_admin = MyModelAdmin(model=MyModel, admin_site=AdminSite())
Исходя из ModelAdmin source , для реализации save_model
по умолчанию требуется только экземпляр вашей модели, поэтому его можно вызвать, например, следующим образом:
my_model_admin.save_model(obj=MyModel(), request=None, form=None, change=None)
# some test assertions here
Все зависит от того, что делает ваш save_model
, и что вы хотите проверить.
Предположим, что ваш save_model
проверяет права пользователя, тогда вам нужно будет передать запрос (т. Е. Третий ингредиент) действительному пользователю, в дополнение к экземпляру модели:
super_user = User.objects.create_superuser(username='super', email='super@email.org',
password='pass')
my_model_admin.save_model(obj=MyModel(), request=MockRequest(user=super_user),
form=None, change=None)
# some test assertions here
Пример MockRequest
определен ниже. Основываясь на тестовом источнике Django, минимальный request
состоит из Python object
с атрибутом user
.
Атрибут user
может относиться к фиктивному пользователю или фактическому экземпляру вашего AUTH_USER_MODEL
, в зависимости от ваших потребностей.
class MockRequest(object):
def __init__(self, user=None):
self.user = user
Этот базовый подход применим и к другим ModelAdmin
методам.