【问题标题】:Django 3: Setting user email to be unique, minimal viable solutionDjango 3:将用户电子邮件设置为唯一的、最小的可行解决方案
【发布时间】:2021-06-18 14:35:53
【问题描述】:

我正在编写一个简单的应用程序,我对 Django 用户模型非常满意,除了我希望用户电子邮件是唯一且必填字段。 我已经开发了一个解决方案,但我想知道我是否遗漏了什么。

a) 如果您认为以下解决方案中缺少某些内容,请告诉我

b) 如果您认为自己有更好的解决方案,请分享

这就是我所做的

  1. 创建了自定义用户模型

# customers/models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    email = models.EmailField(verbose_name='Email', unique=True, blank=False, null=False)
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = ['email']

  1. 将 AUTH_USER_MODEL = 'customers.User' 添加到 settings.py

  2. 更改了对用户模型的引用:

   User = get_user_model()
  1. 修改了 admin.py 以便能够使用 Django admin 添加用户。
# customers/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth import get_user_model

User = get_user_model()

class CustomUserAdmin(UserAdmin):
    list_display = ('username', 'email', 'is_staff')

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'email', 'password1', 'password2'),
        }),
    )

admin.site.register(User, CustomUserAdmin)

【问题讨论】:

  • 这能回答你的问题吗? Make User email unique django
  • 不完全是,我想要一个最低限度的解决方案,以确保唯一的电子邮件和不损坏的 django 身份验证系统。
  • 最低限度是确保所有用户创建都使用相同的表单,并且该表单对User 表进行查询,以确保表单中email 字段的值是唯一的数据库。

标签: django django-models django-users


【解决方案1】:

我希望你正在寻找这个

在你的任何models.py中使用下面的代码sn-ps

models.py

from django.contrib.auth.models import User
User._meta.get_field('email')._unique = True

django 版本:3.0.2

参考:Django auth.user with unique email

https://stackoverflow.com/a/64075027/6651010

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2010-11-25
    • 2017-12-16
    • 2018-10-23
    • 1970-01-01
    相关资源
    最近更新 更多