Drf use social auth with simple-jwt library AttributeError: Manager isn't available

I try to customize drf_social_oauth2 with drf simple-jwt

I use core.models instead of standard social_oauth2 models, but got 500 status code, error "AttributeError: Manager isn't available; 'oauth2_provider.Application' has been swapped for 'core.Application'"

My files: settings.py

INSTALLED_APPS = [
...
    'oauth2_provider',
    'social_django',
    'drf_social_oauth2',
    'apps.core',
...
]

...
'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
        'drf_social_oauth2.authentication.SocialAuthentication',
    ),
...

AUTHENTICATION_BACKENDS = {
    'django.contrib.auth.backends.ModelBackend',
    'drf_social_oauth2.backends.DjangoOAuth2',
    'social_core.backends.google.GoogleOAuth2',
    'social_core.backends.apple.AppleIdAuth',
}

CTIVATE_JWT = True
DRFSO2_URL_NAMESPACE = "drf"

OAUTH2_PROVIDER = {
    "ACCESS_TOKEN_EXPIRE_SECONDS": 30 * 60,
    "REFRESH_TOKEN_EXPIRE_SECONDS": 24 * 60 * 60,
    "ACCESS_TOKEN_GENERATOR": "apps.core.oauth2_tokens_generators.generate_access_token",
    "REFRESH_TOKEN_GENERATOR": "apps.core.oauth2_tokens_generators.generate_refresh_token",
}

OAUTH2_PROVIDER_APPLICATION_MODEL = "core.Application"
OAUTH2_PROVIDER_ACCESS_TOKEN_MODEL = "core.AccessToken"
OAUTH2_PROVIDER_REFRESH_TOKEN_MODEL = "core.RefreshToken"
OAUTH2_PROVIDER_ID_TOKEN_MODEL = "core.IDToken"
OAUTH2_PROVIDER_GRANT_MODEL = "core.Grant"

# GOOGLE OAUTH2 SETTINGS

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = config("SOCIAL_AUTH_GOOGLE_OAUTH2_KEY", default="")
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = config("SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET", default="")

SOCIAL_AUTH_APPLE_ID_CLIENT = config("SOCIAL_AUTH_APPLE_ID_CLIENT", default="")
SOCIAL_AUTH_APPLE_ID_TEAM = config("SOCIAL_AUTH_APPLE_ID_TEAM", default="")
SOCIAL_AUTH_APPLE_ID_KEY = config("SOCIAL_AUTH_APPLE_ID_KEY", default="")
SOCIAL_AUTH_APPLE_ID_SECRET = config("SOCIAL_AUTH_APPLE_ID_SECRET", default="")

core.models

"""
Module for defining OAuth2 models for token management.
"""

from django.db.models import CharField
from oauth2_provider import models


class Application(models.AbstractApplication):
    """
    Customized OAuth2 Application model.
    Inherits from `oauth2_provider.models.AbstractApplication`.
    """


class Grant(models.AbstractGrant):
    """
    Customized OAuth2 Grant model.
    Inherits from `oauth2_provider.models.AbstractGrant`.
    """


class AccessToken(models.AbstractAccessToken):
    """
    Customized OAuth2 Access Token model.
    Inherits from `oauth2_provider.models.AbstractAccessToken`.
    Attributes:
    token (str): The access token value.
    """

    token = CharField(
        max_length=2048,
        unique=True,
        db_index=True,
    )


class RefreshToken(models.AbstractRefreshToken):
    """
    Customized OAuth2 Refresh Token model.
    Inherits from `oauth2_provider.models.AbstractRefreshToken`.
    Attributes:
    token (str): The refresh token value.
    """

    token = CharField(max_length=2048)


class IDToken(models.AbstractIDToken):
    """
    Customized OAuth2 ID Token model.
    Inherits from `oauth2_provider.models.AbstractIDToken`.
    """

oauth2_tokens_generators.py

"""
Module to generate JWT tokens using SimpleJWT library.
This module provides functions to generate refresh and access tokens
using SimpleJWT library for authentication purposes.
"""

from rest_framework_simplejwt.tokens import RefreshToken as SimpleJWTRefreshToken


def generate_refresh_token(request):
    """
    Generate a refresh token for the given user.
    Parameters:
    request (HttpRequest): The HTTP request object containing user information.
    Returns:
    str: The generated refresh token.
    """
    refresh = SimpleJWTRefreshToken.for_user(request.user)
    return str(refresh)


def generate_access_token(request):
    """
    Generate an access token for the given user.
    Parameters:
    request (HttpRequest): The HTTP request object containing user information.
    Returns:
    str: The generated access token.
    """
    refresh = SimpleJWTRefreshToken.for_user(request.user)
    return str(refresh.access_token)

How cat I fix the error?

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