我收到这个错误。
错误:订阅。StripeCustomer.user:(fields.E301(字段定义与模型"auth.User"的关系,该关系已交换出去。提示:更新关系以指向"settings.AUTH_USER_MODEL"。
我正试图按照本手册配置Django Stripe订阅https://testdriven.io/blog/django-stripe-subscriptions/
我的型号.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
我的管理员.py
from django.contrib import admin
from subscriptions.models import StripeCustomer
admin.site.register(StripeCustomer)
我的设置.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
从django.contrib.auth
指向User
模型,而实际上您使用的是自定义用户模型CustomUser
,因此会出现错误。一般来说,如果想要拥有用户模型的外键或任何相关字段,应该将其指向settings.AUTH_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