【问题标题】:Use name as a primary key instead of id in a User model Django在用户模型 Django 中使用名称作为主键而不是 id
【发布时间】:2020-09-07 10:56:39
【问题描述】:

我正在 Django RF 上构建 REST Api,并在前端构建 React。我有用户,我需要用户通过他们的昵称访问他们的帐户,而不是 id(用户/鲍勃、用户/约翰等)。我一直在考虑将默认的 Django pk 更改为用户名。这样当我从 React 发出请求时,我将使用该名称。我的用户模型非常简单:

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=32, unique=True)
    name = models.CharField(primary_key=True, max_length=64, unique=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    date_joined = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD = 'email'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return self.email

但我怀疑这是否是一个好主意,以及我将来是否会遇到一些意想不到的问题。我以前一直用PK。这样做是一种好习惯,还是我应该仍然使用 ID 作为 PK,在前端显示名称但在后台向用户的 ID 发出请求?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    如果您保持主键不变,最好的方法是调整 DRF 查找字段,而不是 id,使用名称。

    例如:

    Class UserViewset(viewsets.ModelViewSet):
       lookup_field = 'name' #default is id
    

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 2016-08-13
      • 1970-01-01
      • 2011-12-10
      • 2021-10-24
      • 1970-01-01
      • 2020-07-06
      • 2019-10-05
      • 2015-01-07
      相关资源
      最近更新 更多