问题描述
我收到此错误。
错误:subscriptions.StripeCustomer.user:(fields.E301) 字段定义 与模型“auth.User”的关系,该模型已被换出。 提示:更新关系以指向“settings.AUTH_USER_MODEL”。
我正在尝试按照本手册 https://testdriven.io/blog/django-stripe-subscriptions/
配置 Django Stripe 订阅我的模型.py
from django.contrib.auth.models import User
from django.db import models
class StripeCustomer(models.Model):
user = models.OnetoOneField(to=User,on_delete=models.CASCADE)
stripeCustomerId = models.CharField(max_length=255)
stripeSubscriptionId = models.CharField(max_length=255)
def __str__(self):
return self.user.username
我的 admin.py
from django.contrib import admin
from subscriptions.models import StripeCustomer
admin.site.register(StripeCustomer)
我的settings.py
#used for django-allauth
AUTH_USER_MODEL = 'accounts.CustomUser'
DEFAULT_AUTO_FIELD='django.db.models.AutoField'
SITE_ID = 1
AUTHENTICATION_BACKENDS = (
'allauth.account.auth_backends.AuthenticationBackend','django.contrib.auth.backends.ModelBackend',)
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
ACCOUNT_EMAIL_VERIFICATION = "none"
帐户/模型.py
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
class Meta:
verbose_name_plural = 'CustomUser'
上面设置后,我执行了“python manage.py makemigrations && python manage.py migrate”,然后出现了错误。
我刚刚在这个问题中提到了上述设置,但如果需要更多代码,请告诉我我会用该信息更新我的问题。谢谢
解决方法
您的 OneToOneField
指向 User
中的 django.contrib.auth
模型,而实际上您使用的是自定义用户模型 CustomUser
,因此您会收到错误消息。通常,如果您想拥有一个外键或任何与用户模型相关的字段,则应将其指向 settings.AUTH_USER_MODEL
,如 Referencing the User model [Django docs] 中所述,以便可以轻松防止此类问题。因此,像这样更改您的 StripeCustomer
模型:
from django.conf import settings
from django.db import models
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