如何使用 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。您还应该确保您的测试也有此配置(如果您使用单独的配置进行测试)