使用PostgresSQL在Django中将电子邮件的超级用户设置为用户名字段

时间:2020-06-26 20:53:28

标签: python django postgresql

我一直在学习教程,并从here阅读文档,但是由于某些原因,每次我设置数据库时,它仍然会要求我提供用户名而不是用于注册的电子邮件。我不知道自己在做什么错,我什至删除并重新创建了数据库,但这没有任何改变。

这是来自models.py的代码

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager


class MyAccountManager(BaseUserManager):
    def create_user(self, email, first_name,last_name, password=None):
        if not email:
            raise ValueError('Must have an email')

        if not first_name:
            raise ValueError('Must have first name')

        if not last_name:
            raise ValueError('Must have last name')

        user = self.model(
            email=self.normalize_email(email),
            first_name=first_name,
            last_name=last_name
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password):
        user = self.create_user(
        email=self.normalize_email(email),
        password=password,
        first_name='John',
        last_name = 'Smith'
        )
        user.is_admin = True
        user.is_superuser = True
        user.save(using=self._db)
        return user


class Account(AbstractBaseUser):
    email                   = models.EmailField(verbose_name="email", max_length=60, unique=True)
    first_name              = models.CharField(max_length = 30)
    last_name               = models.CharField(max_length = 30)

    #these are mandatory
    #username               = models.CharField(max_length=30, unique=True)
    date_joined             = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
    last_login              = models.DateTimeField(verbose_name='last login', auto_now=True)
    is_admin                = models.BooleanField(default=False)
    is_active               = models.BooleanField(default=True)
    is_superuser            = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name','last_name']

    objects = MyAccountManager()

    def __str__(self):
        return self.email

    # For checking permissions. to keep it simple all admin have ALL permissons
    def has_perm(self, perm, obj=None):
        return self.is_admin

    # Does this user have permission to view this app? (ALWAYS YES FOR SIMPLICITY)
    def has_module_perms(self, app_label):
        return True

这也是我来自admin.py的代码

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin

from account.models import Account

class AccountAdmin(UserAdmin):
    list_display = ('email','first_name','date_joined','last_login','is_admin')
    search_fields = ('email','first_name')
    readonly_fields = ('date_joined','last_login')
    ordering = ()
    filter_horizontal = ()
    list_filter = ()
    fieldsets = ()


admin.site.register(Account,AccountAdmin)

1 个答案:

答案 0 :(得分:0)

结果我在settings.py中忘记了这个

AUTH_USER_MODEL ='account.Account'

相关问题