python - Django:ImportError:无法从“django.contrib.auth.models”导入名称“get_user_model”
问题描述
我在使用 Django 默认用户时遇到问题,from django.contrib.auth.models
但尝试将它与我的自定义用户模型一起使用,使用from django.contrib.auth.models import AbstractUser
.
在这些文章之后:
所以这是我的用户模型:
from django.db import models
from django.contrib.auth.models import AbstractUser
# from django.conf import settings
from django_countries.fields import CountryField
# https://github.com/SmileyChris/django-countries
class User(AbstractUser):
"""auth/login-related fields"""
is_a = models.BooleanField('a status', default=False)
is_o = models.BooleanField('o status', default=False)
def __str__(self):
return "{} {}".format(self.first_name, self.last_name)
这是我的个人资料模型:
from django.db import models
from django_countries.fields import CountryField # https://github.com/SmileyChris/django-countries
from django.contrib.auth.models import get_user_model
User = get_user_model()
# https://medium.com/swlh/best-practices-for-starting-a-django-project-with-the-right-user-model-290a09452b88
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
"""non-auth-related/cosmetic fields"""
user = models.OneToOneField(User, on_delete=models.CASCADE)
birth_date = models.DateTimeField(auto_now=False, auto_now_add=False, null=True)
nationality = CountryField(null=True)
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True)
def __str__(self):
return f'{self.user.username} Profile'
"""receivers to add a Profile for newly created users"""
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
在我的settings.py
我添加AUTH_USER_MODEL = 'mysite.User'
settings.py
:
AUTH_USER_MODEL = 'mysite.User'
INSTALLED_APPS = [
'mysite.apps.MysiteConfig',
'django_countries',
'djmoney',
'rest_framework',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
但是当我尝试进行迁移时,我得到了错误:
ImportError: cannot import name 'get_user_model' from 'django.contrib.auth.models'
我一直在寻找答案,但我只是在谈论 Django 需要 1.5 或更高版本的话题,而我正在使用 Django 3.0.2
我发现的典型帖子是这样的:
有谁知道我错过了什么?还是做错了?
谢谢!
更新 1:
这是我的用户视图,带有我的用户序列化程序:
views_user.py
:
from rest_framework import generics
from django.contrib.auth import get_user_model
from ..models.model_user import *
from ..serializers.serializers_user import *
class UserIndex(generics.ListAPIView):
"""List all users, or create a new user."""
queryset = User.objects.all().order_by('id')
serializer_class = UserIndexSerializer
class UserCreate(generics.CreateAPIView):
"""List all art pieces, or create a new art piece."""
queryset = User.objects.all()
serializer_class = UserCreateSerializer
class UserDetails(generics.RetrieveUpdateDestroyAPIView):
"""Retrieve, update or delete a user instance."""
queryset = User.objects.all()
serializer_class = UserDetailsSerializer
serializers_user.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
from ..models.model_user import *
class UserIndexSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = [
'id',
'first_name',
'last_name',
'email',
'age',
# 'nationality',
'gender',
'profession'
]
class UserCreateSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = [
'first_name',
'last_name',
'email',
'profession'
]
class UserDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
解决方案
您在 Profile 模型中的导入from django.contrib.auth.models import get_user_model
是错误的。
你应该这样做from django.contrib.auth import get_user_model
,注意最后没有.models
。
根据 Django 文档中的文档和示例:https ://docs.djangoproject.com/en/3.0/topics/auth/customizing/#django.contrib.auth.get_user_model
推荐阅读
- spring-cloud - Spring Cloud Data Flow Kinises 示例消费者失败
- java - 当用户单击下一个按钮时加载 reyclerview 的下一项,在此有错误
- go - 如何获取 openapi 服务器值
- node.js - 如何在 Windows IIS 上使用 Angular 和 nodejs 托管 MEAN 堆栈应用程序
- node.js - 在哪里查看 Azure Function App 的日志
- typescript - 对于带返回接口的类型函数,允许具有非接口的属性
- scala - aiTcpListener - 端点上的 TCP 通道绑定失败 [/127.0.0.1:2551] java.net.BindException: [/127.0.0.1:2551] 地址已在使用中
- python - 如何将数据框中的两个特定列转换为 numpy 数组?
- java - 启用 schedulerSupport 将 activemq 代理置于从模式等待获取锁
- java - 无法使用 intellij jupiter 运行测试