django - 尝试在 Django 中进行迁移时出现类型错误 : Abstract base class containing model fields not permitted for proxy model 'TokenProxy' .

标签 django django-models django-rest-framework djoser

我创建了一个自定义用户模型,用电子邮件替换用户名,并希望将其与 Djoser 和 React 一起使用。
但是当我尝试进行迁移时,我收到此错误(更多详细信息如下):

TypeError: Abstract base class containing model fields not permitted for proxy model 'TokenProxy'.

模型.py:

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin

class UserAccountManager(BaseUserManager):
    def create_user(self, email, name, password=None):
        if not email:
            raise ValueError('Users must have an email address')
        
        email = self.normalize_email(email)
        user = self.model(email=email, name=name)

        user.set_password(password)
        user.save()

        return user

    def create_superuser(self, email, password, name, **extra_fields):
        """Create and save a SuperUser with the given email and password."""
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError('Superuser must have is_staff=True.')
        if extra_fields.get('is_superuser') is not True:
            raise ValueError('Superuser must have is_superuser=True.')

序列化器.py

from djoser.serializers import UserCreateSerializer, UserSerializer
from django.contrib.auth import get_user_model
User = get_user_model()

class UserCreateSerializer(UserCreateSerializer):
    class Meta(UserCreateSerializer.Meta):
        model = User
        fields = ('id', 'email', 'name', 'password')

url.py

urlpatterns = [
    path('auth/', include('djoser.urls')),
    path('auth/', include('djoser.urls.jwt')),
]

urlpatterns +=  [re_path(r'^.*', TemplateView.as_view(template_name='index.html'))]

当我尝试 makemigrations 时遇到此错误:

  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\Users\Jonas\djangoProjects\AntDesign\coursesApi\urls.py", line 10, in <module>
    path('api/', include('api.urls')),
  File "C:\Users\Jonas\.virtualenvs\AntDesign-TgIU7Y6b\lib\site-packages\django\urls\conf.py", line 34, in include
    urlconf_module = import_module(urlconf_module)
  File "c:\users\jonas\appdata\local\programs\python\python37\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\Users\Jonas\djangoProjects\AntDesign\api\urls.py", line 3, in <module>
    from .views import CoursesListView, CoursesDetailView, VideoListView, VideoDetailView
  File "C:\Users\Jonas\djangoProjects\AntDesign\api\views.py", line 4, in <module>
    from .serializers import CourseSerializer, VideoSerializer
  File "C:\Users\Jonas\djangoProjects\AntDesign\api\serializers.py", line 1, in <module>
    from djoser.serializers import UserCreateSerializer, UserSerializer
  File "C:\Users\Jonas\.virtualenvs\AntDesign-TgIU7Y6b\lib\site-packages\djoser\serializers.py", line 15, in <module>
    class UserSerializer(serializers.ModelSerializer):
  File "C:\Users\Jonas\.virtualenvs\AntDesign-TgIU7Y6b\lib\site-packages\djoser\serializers.py", line 16, in UserSerializer
    class Meta:
  File "C:\Users\Jonas\.virtualenvs\AntDesign-TgIU7Y6b\lib\site-packages\djoser\serializers.py", line 19, in Meta
    settings.USER_ID_FIELD,
  File "C:\Users\Jonas\.virtualenvs\AntDesign-TgIU7Y6b\lib\site-packages\django\utils\functional.py", line 256, in inner
    self._setup()
  File "C:\Users\Jonas\.virtualenvs\AntDesign-TgIU7Y6b\lib\site-packages\djoser\conf.py", line 140, in _setup
    self._wrapped = Settings(default_settings, explicit_overriden_settings)
  File "C:\Users\Jonas\.virtualenvs\AntDesign-TgIU7Y6b\lib\site-packages\djoser\conf.py", line 116, in __init__
    self._init_settings_to_import()
  File "C:\Users\Jonas\.virtualenvs\AntDesign-TgIU7Y6b\lib\site-packages\djoser\conf.py", line 135, in _init_settings_to_import
    setattr(self, setting_name, import_string(value))
  File "C:\Users\Jonas\.virtualenvs\AntDesign-TgIU7Y6b\lib\site-packages\django\utils\module_loading.py", line 17, in import_string
    module = import_module(module_path)
  File "c:\users\jonas\appdata\local\programs\python\python37\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "C:\Users\Jonas\.virtualenvs\AntDesign-TgIU7Y6b\lib\site-packages\rest_framework\authtoken\models.py", line 43, in <module>
    class TokenProxy(Token):
  File "C:\Users\Jonas\.virtualenvs\AntDesign-TgIU7Y6b\lib\site-packages\django\db\models\base.py", line 174, in __new__
    "permitted for proxy model '%s'." % name
TypeError: Abstract base class containing model fields not permitted for proxy model 'TokenProxy'.

最佳答案

请检查following PRdjango-rest-framework中。

作为修复,您可以在 INSTALLED_APPS 中的 djoser 之前添加 rest_framework.authtoken

关于django - 尝试在 Django 中进行迁移时出现类型错误 : Abstract base class containing model fields not permitted for proxy model 'TokenProxy' .,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64303246/

相关文章:

mysql - Django 与 MySQL 和 UTF-8

Python calendar.month_name 如何跳过 0-index

python - Django:匡威 `__endswith`

python - 在 django 迁移期间处理数据?

Django查询集过滤器基于父级的父级

python - OperationalError,没有这样的列。 Django

python - 如何用括号固定 pipenv 要求?

django - 在base.html中显示任务计数

Django REST 框架 : Setting up prefetching for nested serializers

javascript - 在 Django 中使用 jquery 发布文件