【问题标题】:Django: How to write groups and where those groups live?Django:如何编写组以及这些组住在哪里?
【发布时间】:2014-04-03 23:31:47
【问题描述】:

因此 django 将组声明为“将标签和权限应用于多个用户的通用方式”。我的问题是这段代码是什么样的,这段代码在哪里?

具体来说,组是否需要模型类型?任何有助于发现这些工作方式的帮助都会非常有帮助。

PS:如何将组应用到当前登录的用户?

感谢您的帮助。

【问题讨论】:

标签: python django django-models django-authentication


【解决方案1】:

群组只不过是models

class Player(models.Model):
    name = models.CharField(max_length=100)
    age = models.PositiveIntegerField()

以上,Playermodel 用于添加玩家。现在,如果您想将这些玩家分组,您可以执行以下操作:

class Team(models.Model):
    players = models.ManyToManyField(Player)
    team_name = models.CharField(max_length=100) 

现在,您只需创建一个团队并不断向其中添加球员。很简单,对吧?

到目前为止还好。比方说,今天有 4 场比赛,这意味着 8 支球队参加了这些比赛。在今天出场的球员中,有 15 人受伤,10 人被禁止参加下一场比赛。因此,如果您想为受伤和被禁止的玩家创建群组,您可以执行以下操作:

class Injured(models.Model):
     players = models.ManyToManyField(Player)

class Banned(models.Model):
    players = models.ManyToManyField(Player)

就是这样。

现在的问题是为什么要使用组?

当然,没有必要编写 group 模型,你也有其他选择。

class Player(models.Model):
    name = models.CharField(max_length=100)
    age = models.PositiveIntegerField()
    team = models.CharField(max_length=100)
    is_injured = models.BooleanField(default=False)
    is_banned = models.BooleanField(default=False)

现在想想: 15 名球员受伤,这意味着您必须将 15 名球员的is_injured 更新为True。 8 个被禁止,这意味着您必须将 8 个玩家的 is_banned 更改为 True。另外,你必须一遍又一遍地写下每个球员的球队的名字。这真的非常耗时。现在你看到的重要性了吗?

这段代码在哪里?

在您的models.py 文件中。

【讨论】:

【解决方案2】:

用户组是“django.contrib.auth”的一部分。 如果您将它与您的用户模型(Django 1.4 及更低版本中的任何普通用户,或 Django 1.5 或更高版本中的带有“PermissionsMixin”的自定义用户模型)一起使用,那么您将在数据库中找到名为:

  • auth_group
  • auth_group_permissions
  • auth_permission
  • auth_user_groups
  • auth_user_user_permissions

每个用户都获得所有权限集

  • 到在 auth_user_groups 表中分配给用户的组 (auth_groups)
  • 对于 auth_user_user_permissions 中的用户

更多信息请参见django.contrib.aut

this post中解释了将用户添加到组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多