【发布时间】:2018-08-17 09:43:20
【问题描述】:
我通过将 ManyToManyField 添加到另一个名为 Algorithm 的表中来扩展 Django 的默认 User 类。新的用户类是:
class User(AbstractUser):
name = CharField(_("Name of User"), blank=True, max_length=255)
algorithms = ManyToManyField(Algorithm, blank=True, default=None, related_name="users")
def get_absolute_url(self):
return reverse("users:detail", kwargs={"username": self.username})
我想指定用户is_superuser 还是is_staff 然后User.algorithms.all() 将获得所有算法。否则,仅获取数据透视表User_user_models 中的记录。如何做到这一点?我尝试添加一个属性方法来检查是否超级用户/员工然后返回所有,否则返回超级但它不起作用。
P.S:在创建/编辑用户时,如果用户设置为超级用户或员工,则无需选择算法。
【问题讨论】:
-
我会在这里创建一个自定义关系管理器。通常,覆盖默认的 Django 逻辑不是一个好主意。
-
我认为这不应该是一个模型字段。这只是一种方法。您实际的 usr-alg 匹配项存储在与用户模型表
User_user_models无关,对于特定用户,您根本不需要任何匹配项。 -
@WillemVanOnsem 你有如何做的例子吗?
标签: django python-3.x django-models