Ошибка "CustomUser не имеет клиента" для пользователей, авторизованных через google

У меня есть модель CustomUser для разграничения между клиентом и торговцем.

class CustomUser(AbstractUser):
is_customer = models.BooleanField(default=False)
is_merchant = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)

Теперь у клиентов есть функция добавления в корзину, для которой у меня есть utils.py

def cartData(request):
if request.user.is_authenticated:
    customer = request.user.customer
    order, created = Order.objects.get_or_create(customer=customer, complete=False)
    items = order.orderitem_set.all()
    cartItems = order.get_cart_items
else:
    cookieData = cookieCart(request)
    cartItems = cookieData['cartItems']
    order = cookieData['order']
    items = cookieData['items']

return {'cartItems':cartItems ,'order':order, 'items':items}

В соответствии с utils.py мне всегда нужен request.user.customer. Экземпляр customer здесь создается во время регистрации клиента.

forms.py:

 @transaction.atomic
def save(self):
    user = super().save(commit=False)
    user.is_customer = True
    user.first_name = self.cleaned_data.get('first_name')
    user.last_name = self.cleaned_data.get('last_name')
    user.username=self.cleaned_data.get('username')
    user.email=self.cleaned_data.get('email')
    user.phone_number=self.cleaned_data.get('phone_number')
    user.address=self.cleaned_data.get('address')
    user.save()
    customer = Customer.objects.create(user=user)
    customer.first_name=self.cleaned_data.get('first_name')
    customer.last_name=self.cleaned_data.get('last_name')
    customer.username=self.cleaned_data.get('username')
    customer.email=self.cleaned_data.get('email')
    customer.phone_number=self.cleaned_data.get('phone_number')
    customer.address=self.cleaned_data.get('address')
    customer.save()
    return user

Итак, с клиентом все работало просто отлично. Но проблема возникает, когда я пытаюсь войти в систему с помощью google. Я зарегистрировался в функциональности google с помощью Oauth, поработал в консоли разработчиков google, установил необходимые пакеты и внес изменения в settings.py.

settings.py:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'projectapp.apps.ProjectappConfig',
'django_extensions',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',
'allauth.socialaccount.providers.facebook',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
]
AUTHENTICATION_BACKENDS = [

# Needed to login by username in Django admin, regardless of `allauth`
'django.contrib.auth.backends.ModelBackend',

# `allauth` specific authentication methods, such as login by e-mail
'allauth.account.auth_backends.AuthenticationBackend',


]
SOCIALACCOUNT_PROVIDERS = {
'google': {
    'SCOPE': [
        'profile',
        'email',
    ],
    'AUTH_PARAMS': {
        'access_type': 'online',
    }
}
}

Ошибка заключается в том, что когда я нажал на кнопку "войти с помощью google", я столкнулся с ошибкой

CustomUser has no customer.

В панели администратора пользователь создан, но для него нет клиента.

Очевидно, из ошибки я понял, что для пользователей, которые вошли в систему с помощью google, нужен экземпляр клиента. Но я не понимаю, как я могу их создать, так как у меня нет специальной формы для этого типа пользователей.

Вернуться на верх