【问题标题】:Stripe AttributeError: 'str' object has no attribute 'objects' (custom user model) [duplicate]Stripe AttributeError:'str'对象没有属性'objects'(自定义用户模型)[重复]
【发布时间】:2021-06-03 12:31:52
【问题描述】:

我正在尝试配置 Django Stripe 订阅。

现在尝试通过以下代码设置 webhook 以创建新的客户数据。

views.py

import stripe
from django.conf import settings
from django.contrib.auth.models import User
from subscriptions.models import StripeCustomer  

@csrf_exempt
def stripe_webhook(request)

...


#Get the user and create a new StripeCustomer
user = settings.AUTH_USER_MODEL.objects.get(id=client_reference_id)

StripeCustomer.objects.create(
    user=user,
    stripeCustomerId=stripe_customer_id,
    stripeSubscriptionId=stripe_subscription_id,
)

print(user.username + ' just subscribed.')

回溯和错误信息如下。

Traceback(最近一次调用最后一次):文件 “/home/app_admin/venv_ruling/ruling/subscriptions/views.py”,第 125 行, 在 stripe_webhook 中

用户 = settings.AUTH_USER_MODEL.objects.get(id=client_reference_id) AttributeError: 'str' 对象没有属性 'objects'

我正在按照本手册创建此应用程序https://testdriven.io/blog/django-stripe-subscriptions/

手册指定下面的代码。

user = User.objects.get(id=client_reference_id)

但我使用的是“自定义用户模型”。所以我把上面的代码改成下面的

user = settings.AUTH_USER_MODEL.objects.get(id=client_reference_id)

以下是其他代码。

我的models.py

从 django.conf 导入设置 从 django.db 导入模型

class StripeCustomer(models.Model):
    user = models.OneToOneField(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    stripeCustomerId = models.CharField(max_length=255)
    stripeSubscriptionId = models.CharField(max_length=255)

    def __str__(self):
        return self.user.username

accounts/models.py

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):

    class Meta:
        verbose_name_plural = 'CustomUser'

我的设置.py

#used for django-allauth
AUTH_USER_MODEL = 'accounts.CustomUser'

我刚刚在此问题中提到了上述设置,但如果需要更多代码,请告诉我,我将使用该信息更新我的问题。谢谢

【问题讨论】:

  • 这似乎与 stripe-python 无关,并且与您之前的问题重复。
  • @Nolan H 这段代码是“webhook”的stripe函数的一部分,内容与之前的略有不同。之前的问题没有得到答案,但新问题得到了适当的答案,因为我修改了它。

标签: python django django-models django-rest-framework


【解决方案1】:

settings.AUTH_USER_MODEL 替换为get_user_model()

代码中的这一行是导致此错误的原因 -

user = settings.AUTH_USER_MODEL.objects.get(id=client_reference_id)

settings.AUTH_USER_MODEL 具有字符串类型值。

简单,如下图替换-

from django.contrib.auth import get_user_model # import this in your module first.

user = get_user_model().objects.get(id=client_reference_id)

【讨论】:

  • 问题解决了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
相关资源
最近更新 更多