Python 无法使用用户模型Django登录

Python 无法使用用户模型Django登录,python,django,Python,Django,我使用User.objects.create()将数据插入到用户模型中,似乎无法使用正确的电子邮件和密码登录。每当我尝试使用Django时,Django总是返回“错误的用户名或密码”,即使我已使用Django ORM检查该用户是否存在 但是,如果我使用网页上的链接注册,我可以登录,但它创建了一个用户名为空的用户,因此我只能创建一个用户,使用Django ORM更改用户名,然后创建另一个用户。我做错什么了吗?提前谢谢 以下是我的用户模型: from django.contrib.auth.mode

我使用User.objects.create()将数据插入到用户模型中,似乎无法使用正确的电子邮件和密码登录。每当我尝试使用Django时,Django总是返回“错误的用户名或密码”,即使我已使用Django ORM检查该用户是否存在

但是,如果我使用网页上的链接注册,我可以登录,但它创建了一个用户名为空的用户,因此我只能创建一个用户,使用Django ORM更改用户名,然后创建另一个用户。我做错什么了吗?提前谢谢

以下是我的用户模型:

from django.contrib.auth.models import AbstractUser, UserManager
from django.core.urlresolvers import reverse
from django.db import models
from django.db.models import Q
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _


class MyUserManager(UserManager):

 def create_user(self, *args, **kwargs):
     """
     Set username field as email.
     """
     kwargs['email'] = self.normalize(kwargs['email'])
     kwargs['username'] = self.normalize(kwargs['email'])
     return super(MyUserManager, self).create_user(*args, **kwargs)


@python_2_unicode_compatible
class User(AbstractUser):
    ADMIN_AREA = 'aa'
    FINANCE = 'fn'
    RELATIONSHIP_MANAGER = 'rm'
    BUSINESS_MANAGER = 'bm'
    SENIOR_BUSINESS_MANAGER = 'sbm'
    ADMIN_INTERNAL = 'brm'

    POSITION_CHOICES = {
        (ADMIN_INTERNAL, 'Admin Internal'),
        (SENIOR_BUSINESS_MANAGER, 'Senior Business Manager'),
        (BUSINESS_MANAGER, 'Business Manager'),
        (RELATIONSHIP_MANAGER, 'Relationship Manager'),
        (FINANCE, 'Finance'),
        (ADMIN_AREA, 'Admin Area')
    }
    name = models.CharField(_('Nama Lengkap'), blank=True, max_length=255)
    phone = models.CharField('Nomor telepon', blank=True, max_length=20)
    phone_alt = models.CharField('Nomor telepon alternatif', blank=True, max_length=20)
    date_of_birth = models.DateField('Tanggal lahir', null=True)
    leader = models.ForeignKey('self', on_delete=models.PROTECT, null=True, blank=True)
    email = models.EmailField(max_length=255, unique=True)
    position = models.CharField('Posisi', max_length=3, choices=POSITION_CHOICES, blank=True)
    branch = models.ForeignKey(Branch, on_delete=models.PROTECT, blank=True, null=True)

    USERNAME_FIELD = 'email'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = []

    def get_all_children(self, include_self=True):
         """Get all relationship manager under one user until second level."""
        childs = User.objects.filter(leader=self)
        if include_self:
        childs = User.objects.filter(Q(id=self.id) | Q(leader=self))

        return childs

    objects = MyUserManager()

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('users:detail', kwargs={'email': self.email})
这是我用来将数据插入模型的脚本。基本上,我所做的是导入一个csv文件,并根据文件中的项目创建一个用户

import csv
from pertama.users.models import User


with open('zz_supporting_files/data.csv') as csvfile:
 reader = csv.DictReader(csvfile)
 password = "first123"
 for row in reader:
  name = row['NAMA']
  if row['EMAIL'] == "":
   email = name.split(' ')[0].lower() + "@firstone.com"
  else:
   email = row['EMAIL']
  if row['JABATAN'] == "MARKETING":
   position = "rm"
  else:
   position = "bm"
  print(name, email, password, position)  # for debugging
  user = User.objects.create(
   name=name,
   email=email,
   password=password,
   username=email,
   position=position,
  )
  user.save()
User.objects.all()  # Debugging only

编辑:插入CSV文件的代码

您只需将命令调整为
User.objects.create_User()
,这样可以正确设置密码,您就可以登录网页了

不要使用
User.objects.create()

正确的命令集应为:

$  pyhton manage.py shell
然后在shell中:

 >>> from django.contrib.auth.models import User
 >>> user=User.objects.create_user('foo', password='bar')
 #Only if you want user to have superuser access, else skip this
 >>> user.is_superuser=True
 >>> user.is_staff=True
 >>> user.save()

您只需将命令调整为
User.objects.create_User()
,因为这将负责正确设置密码,您将能够登录您的网页

不要使用
User.objects.create()

正确的命令集应为:

$  pyhton manage.py shell
然后在shell中:

 >>> from django.contrib.auth.models import User
 >>> user=User.objects.create_user('foo', password='bar')
 #Only if you want user to have superuser access, else skip this
 >>> user.is_superuser=True
 >>> user.is_staff=True
 >>> user.save()

您是否使用
set_password
为用户帐户设置密码?创建用户后,您必须使用
set_password
方法为用户设置密码。您是否使用
set_password
为用户帐户设置密码?创建用户后,您必须使用
set_password
方法为用户设置密码。啊!我懂了。但是使用create()也会将数据插入到模型中。有什么区别?@WilliamTekiam brother,这里有详细的解释-@WilliamTekiam brother,如果您的问题已经解决,您可以通过勾选来支持此答案。谢谢!我懂了。但是使用create()也会将数据插入到模型中。有什么区别?@WilliamTekiam brother,这里有详细的解释-@WilliamTekiam brother,如果您的问题已经解决,您可以通过勾选来支持此答案。谢谢你