字段定义与模型"auth"的关系。用户",已被换出。(字段。E301)



我收到这个错误。

错误:订阅。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"然后错误发生了。

我刚刚在这个问题中提到了上面的设置,但如果需要更多的代码,请告诉我我会用这些信息更新我的问题。谢谢

您的OneToOneFielddjango.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

最新更新