【问题标题】:How to create a user in django with custom attributes using create_user?如何使用 create_user 在 django 中创建具有自定义属性的用户?
【发布时间】: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函数被Django User模型调用,所以user不是你的自定义User模型对象,而是“内置” User 模型对象。

标签: python django unit-testing testing middleware


【解决方案1】:

你必须设置AUTH_USER_MODEL = 'myapp.models.User'

请参阅:substituting a custom user model

没有这个设置,Django 将继续使用默认的内置User。您还应该确保您的测试也具有此配置(如果您使用单独的配置进行测试)

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多