【发布时间】:2021-02-10 04:25:28
【问题描述】:
我正在尝试对 django 应用程序的中间件进行测试。看起来像这样:
class TestAuthenticationMiddleware(TestCase):
@classmethod
def setUpTestData(cls):
cls.user = User.objects.create_user('test_user', 'test@example.com', 'test_password')
def setUp(self):
self.middleware = AuthenticationMiddleware(lambda req: HttpResponse())
self.client.force_login(self.user)
self.request = HttpRequest()
self.request.session = self.client.session
但我收到此属性错误:
queryset = user.get_subscriptions_all()
AttributeError: 'User' object has no attribute 'get_subscriptions_all'
因为 User 类是这样定义的:
User(AbstractBaseUser, LimitHelpers):
[...]
def get_subscriptions_all(self):
return self.subscriptions.all().union(self.account.subscriptions.all())
在我的 utils.py 上:
@receiver(user_logged_in)
def callback_user_loggedin(sender, request, user, **kwargs):
if not user.is_staff and not user.is_superuser:
# Activating user's language
saveCodeCountryFromUser(request, user)
# Updating subscriptions
queryset = user.get_subscriptions_all()
for sub in queryset:
cls = get_subscription_class(sub)
if cls is not None:
cls.callback_user_loggedin()
知道如何使用 create_user 来包含 get_subscriptions_all 属性吗?
【问题讨论】:
-
这个
queryset = user.get_subscriptions_all到底是从哪里来的?您是否将User设置为AUTH_USER_MODEL? -
我刚刚添加了它...我使用的是自定义用户,没有 AUTH_USER_MODEL。
-
然后
callback_useer_loggedin函数被DjangoUser模型调用,所以user不是你的自定义User模型对象,而是“内置”User模型对象。
标签: python django unit-testing testing middleware