设置可选用户名 django 用户

tre*_*rex 4 django python-3.x

我必须将客户信息存储在客户表中。我们不需要存储它们的usernamepassword。但是为了创建客户组和用户,我使用了 djangoUserGroup模型。这是我用来存储基本信息的客户模型。

class Customer(models.Model):
    """
    The Customer 
    """
    UID = models.TextField(blank=True, null=True, db_index=True)
    fk_user = models.ForeignKey(User, primary_key=False)
    fk_details = models.ForeignKey(UserDetails, primary_key=False)
    fk_contact_details = models.ForeignKey(ContactDetails, primary_key=False)
    ...
Run Code Online (Sandbox Code Playgroud)

这是一个创建用户对象的类方法,稍后我将使用它来存储客户信息:

from django.contrib.auth.models import User
def create_user(self, req_dict):
    '''
    Create a new User 
    '''
    try:
        user=User.objects.create_user(**req_dict)
        user.save()
    except:
        return None
    return user
Run Code Online (Sandbox Code Playgroud)

但是这段代码抛出了一个IntegrityError,这是因为我们没有在req_dict

req_dict = {'first_name': u'John', 'last_name': u'Smith', 'email': u'john.smith@xyz.com'}
Run Code Online (Sandbox Code Playgroud)

创建新用户时存储用户名可选的方法是什么?

zan*_*rle 5

如果要使用django.contrib.auth,则不能将用户名字段设为可选。您总是必须在数据库中放入一个值。

为了绕过它,我建议您create_user()为 username生成一个值。您可以使用随机值,也可以从电子邮件创建用户名。只要确保它是独一无二的。