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}
}
class UserDetail(models.Model):
app_label = 'users'
# ...
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模型的表。