Python 创建没有用户名的用户(或使用自动生成的用户名)

Python 创建没有用户名的用户(或使用自动生成的用户名),python,django,Python,Django,我想创建一个注册页面,不要求用户名,因为我不打算使用它(我只需要电子邮件和密码) 然而,我不知道如何告诉django用户名不是强制性的 我很难注册用户,因为他们都有相同的用户名(空白) 我的用户模型: class User(AbstractUser): departments = models.ManyToManyField(Department) def __str__(self): return f'{self.first_name} {self.last_

我想创建一个注册页面,不要求用户名,因为我不打算使用它(我只需要电子邮件和密码)

然而,我不知道如何告诉django用户名不是强制性的

我很难注册用户,因为他们都有相同的用户名(空白)

我的用户模型:

class User(AbstractUser):
    departments = models.ManyToManyField(Department)

    def __str__(self):
        return f'{self.first_name} {self.last_name}'
我的注册表格:

class UserCreateForm(UserCreationForm):
    class Meta():
        fields = ('first_name', 'last_name', 'email', 'departments', 'password1', 'password2')
        model = get_user_model()
观点:

class SignUpView(CreateView):
    form_class = UserCreateForm
    success_url = reverse_lazy('loginPage')
    template_name = 'accounts/signup.html'
为了告诉django忽略用户模型的username字段,我应该更改什么

随机自动生成的用户名是避免此问题的好方法吗?如果是,如何对其进行编码

@Shahzeb Qureshi,我试过这个:

from django.utils.translation import gettext_lazy

class UserCreateForm(UserCreationForm):
    class Meta():
        fields = ('first_name', 'last_name', 'username', 'departments', 'password1', 'password2')
        model = get_user_model()
        labels = {
            'username':gettext_lazy('E-mail'),
        }

一个简单的解决方案是在用户名字段中输入电子邮件地址,而不是将其留空

一个简单的解决方案是在用户名字段中输入电子邮件地址,而不是将其留空

只需通过电子邮件生成用户名,使用下面给出的代码即可

    email = 'punnapavankumar9@gmail.com'
    username = email.split('@')[0]

只需从电子邮件生成用户名,使用下面给出的代码

    email = 'punnapavankumar9@gmail.com'
    username = email.split('@')[0]

在这种情况下,如果使用不同的电子邮件提供商(如yahoo或Outlook)创建相同的ID,那么它将抛出一个用户名。在这种情况下,您可以为每个用户生成一个序列号。对于没有用户名的用户,可以在上述代码email.split()函数后输入序列号。为了验证电子邮件,您可以使用“if'@'in email”方法。在这种情况下,如果使用不同的电子邮件提供商(如yahoo或Outlook)创建相同的ID,那么它将抛出一个用户名已存在错误。在这种情况下,您可以为每个用户生成一个序列号。对于没有用户名的用户,可以在上述代码email.split()函数后输入序列号。为了验证电子邮件,您可以使用“if'@'in email”方法阅读此问题时我首先想到的是准备某种函数,您可以将其传递给用户模型本身,该函数将在每次创建新用户时运行-同时生成随机用户名。但是这个函数还必须检查数据库中是否没有当前用户使用这个句柄(random并不排除重复的可能性)。第二件事是,我非常确信,你想要做的事情是有可能实现的。这可能意味着调整现有的用户模型本身,将用户名字段排除在外。阅读此问题时,我首先想到的是准备某种函数,您将传递给用户模型本身,该函数将在每次创建新用户时运行—同时生成随机用户名。但是这个函数还必须检查数据库中是否没有当前用户使用这个句柄(random并不排除重复的可能性)。第二件事是,我非常确信,你想要做的事情是有可能实现的。这可能意味着调整现有的用户模型本身,不包括用户名字段。。我能问一下你是怎么编码的吗?这是我的第一个项目,从我从文档中读到的内容来看,我认为您的意思是使用不同的用户名标签(电子邮件标签)。。它是?但是,这样我会丢失电子邮件字段的默认验证器(例如,如果有人忘记使用“@”符号..)。请检查我的编辑请求从django.contrib.auth.models导入用户User=User.objects.create_User(用户名=request.POST.get('email'),email=request.POST.get('email'),密码=request.POST.get('passowrd'))在上面的代码中,从post请求中获取的电子邮件被传递到电子邮件字段以及用户名字段,这两个字段都是用于确定看起来不错的目的。。我能问一下你是怎么编码的吗?这是我的第一个项目,从我从文档中读到的内容来看,我认为您的意思是使用不同的用户名标签(电子邮件标签)。。它是?但是,这样我会丢失电子邮件字段的默认验证器(例如,如果有人忘记使用“@”符号..)。请检查我的编辑请求从django.contrib.auth.models导入用户User=User.objects.create_User(用户名=request.POST.get('email'),email=request.POST.get('email'),密码=request.POST.get('passowrd'))在上面的代码中,从post请求中获取的电子邮件被传递到电子邮件字段以及用于此目的的用户名字段