如何检查来自不同模型的布尔值对于团队用户是否为真?

How can I check if a boolean from a different model is true for a user of a team?

我想使用以下模型为团队中的用户添加权限:

class Rights(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    team = models.ForeignKey(Teams, on_delete=models.CASCADE)
    read = models.BooleanField(default=True)
    write = models.BooleanField(default=False)
    edit = models.BooleanField(default=False)

一些用户需要能够创建新条目。有些人不允许有这种可能性。那么,如果某个用户发送了一个请求,我该如何检查这些布尔值中的一个或多个对于这个特定用户来说是真还是假?

可以获得指向myusermyteamRights对象,然后检查 readwrite and/or edit 字段:

right = Rights.objects.get(<strong>user=<em>myuser</em>, team=<em>myteam</em></strong>)
right.read  # bool, True or False
right.write  # bool, True or False
right.edit  # bool, True or False

您可以确保对于每个 user/team 组合,最多有一条记录包含:

from django.conf import settings

class Right(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )
    team = models.ForeignKey(Teams, on_delete=models.CASCADE)
    read = models.BooleanField(default=True)
    write = models.BooleanField(default=False)
    edit = models.BooleanField(default=False)

    class Meta:
        constraints = [
            models.<strong>UniqueConstraint(fields=('user', 'team')</strong>, name='unique_per_user_team'<strong>)</strong>
        ]

Note: It is normally better to make use of the settings.AUTH_USER_MODEL [Django-doc] to refer to the user model, than to use the User model [Django-doc] directly. For more information you can see the referencing the User model section of the documentation.


Note: normally a Django model is given a singular name, so Right instead of Rights.