社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Django:importTerror:无法从“Django.contrib.auth.models”导入名称“get_user_model”

MaxenceP • 5 年前 • 648 次点击  

我在使用Djangos默认用户时遇到问题 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'

设置.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__'
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56869
文章 [ 1 ]  |  最新文章 5 年前