基于django restframework写的报错


RuntimeError: Model class apps.users.models.UserDetail doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

这个报错究竟是啥原因造成的。
下面这个是settings.py的

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework_simplejwt',
    'drfstudy',
    'users',
    'school',
]

序列化器是这样写的

from django.contrib.auth.models import User
from rest_framework.serializers import ModelSerializer

from apps.users.models import UserDetail


class UserDetailSerializer(ModelSerializer):
    class Meta:
        model = UserDetail
        fields = '__all__'

        extra_kwargs = {
            'avatar': {'read_only': True},

        }
class UserSerializer(ModelSerializer):
    userdetail = UserDetailSerializer(required=False, read_only=True)  # 关联序列化器
    class Meta:

        model =  User
        # fields = '__all__',
        exclude = ['password', 'last_name', 'user_permissions']

        extra_kwargs = {
            'last_login': {'read_only': True},
            'is_superuser': {'read_only': True},
            'is_staff': {'read_only': True},
            'is_active': {'read_only': True},
            'date_joined': {'read_only': True},
            'groups': {'read_only': True}
        }
  1. 在UserDetail模型类中指定app_label:
class UserDetail(models.Model):
    app_label = 'users'
    # ...
  1. 在INSTALLED_APPS列表中添加包含UserDetail的app:
    INSTALLED_APPS = [
     # ...
     'users',
    ]
    
    所以完整的代码示例如下:
settings.py:
python
INSTALLED_APPS = [
    # ...
    'users',
]
users/models.py:
python
from django.db import models
class UserDetail(models.Model):
    app_label = 'users'
    # ...

Django要求所有的模型类都必须指定app_label或所在的app必须在INSTALLED_APPS中,否则会报这个错误。
解决此错误后,你需要重新运行迁移命令:


python manage.py makemigrations
python manage.py migrate

这会生成users app的表迁移文件,并执行迁移生成UserDetail模型的表。