如何使用 create_user 在 Django 中创建具有自定义属性的用户?
How to create a user in django with custom attributes using create_user?
我正在尝试 运行 测试 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'
因为用户 class 是这样定义的:
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 属性吗?
您必须设置 AUTH_USER_MODEL = 'myapp.models.User'
参见:substituting a custom user model。
如果没有这个设置,Django 将继续使用默认的内置 User
。您还应该确保您的测试也有此配置(如果您使用单独的配置进行测试)
我正在尝试 运行 测试 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'
因为用户 class 是这样定义的:
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 属性吗?
您必须设置 AUTH_USER_MODEL = 'myapp.models.User'
参见:substituting a custom user model。
如果没有这个设置,Django 将继续使用默认的内置 User
。您还应该确保您的测试也有此配置(如果您使用单独的配置进行测试)