首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImportError:无法从'django.contrib.auth.models‘导入名称'get_user_model’

ImportError:无法从'django.contrib.auth.models‘导入名称'get_user_model’
EN

Stack Overflow用户
提问于 2020-03-27 02:05:20
回答 1查看 2.8K关注 0票数 2

我在使用Djangos默认用户from django.contrib.auth.models时遇到了问题,但是我试图在我的自定义用户模型中使用它,使用from django.contrib.auth.models import AbstractUser

在这些条款之后:

下面是我的用户模型:

代码语言:javascript
复制
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)

这是我的侧写模型:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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__'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-27 02:13:22

您在配置文件模型from django.contrib.auth.models import get_user_model中的导入是错误的。

您应该做from django.contrib.auth import get_user_model,注意在最后没有.models

根据Django文档中的文档和示例:模型

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60878963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档