Huangquan-Creek 2023-06-08 20:44 采纳率: 76%
浏览 21
已结题

基于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条回答 默认 最新

  • 开发技术控 2023-06-08 22:18
    关注
    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模型的表。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 创建了问题 6月8日