Django复合用户名

时间:2017-05-09 21:02:16

标签: python django django-models django-authentication

是否可以使用两个或多个配置为唯一的字段作为Django中的用户名?这是一个愚蠢的想法吗?

例如

class MyUser(AbstractBaseUser, PermissionsMixin):
    user_id = models.CharField(max_length=255)
    backend = models.CharField(max_length=255)
    username = backend + user_id  # ???

    class Meta:
        unique_together = (
            ('user_id', 'backend')
        )

1 个答案:

答案 0 :(得分:0)

您可以'username'成为property。但是因为我假设你想让它成为USERNAME_FIELD并且能够用它来查询数据库,我会做类似的事情:

class MyUser(AbstractBaseUser, PermissionsMixin):
    user_id = models.CharField(max_length=255)
    backend = models.CharField(max_length=255)
    username = models.CharField(max_length=510, editable=False)

    class Meta:
        unique_together = (
            ('user_id', 'backend')
        )

    def save(self, *args, **kwargs):
        self.username = self.backend + self.user_id
        super(MyUser, self).save(*args, **kwargs)