0

我在架构上遇到困难,我需要以下逻辑的帮助。

我有一张桌子Client和一张桌子Rights。该表Client表示具有某些属性的客户端,该表表示Rights每个客户端的可用权限。

所以,我想为客户分配一个可用权限列表(每个用户可以有不同的权限,但都来自表格Rights),我该如何在模型中做到这一点?

在那之后我怎样才能找回分配给他Client的?Rights

客户

name = models.CharField(max_length=256)
user = models.ForeignKey(User)
bio = models.TextField(null=True, blank=True)
website = models.URLField(null=True)

权利

key = models.CharField(unique=True, max_length=255, db_index=True)
title = models.CharField(max_length=100, blank=True)
description = models.TextField(blank=True)

提前致谢!

4

3 回答 3

1

只需在客户端模型中使用ManyToMany字段。毕竟,这是一个多对多的关系。

如果每个权限对于每个客户端都是唯一的,那么请改用从权限到客户端的 ForeignKey。

于 2013-04-22T19:10:06.647 回答
1

使用多对多字段

class Rights(models.Model):
    key = models.CharField(unique=True, max_length=255, db_index=True)
    title = models.CharField(max_length=100, blank=True)
    description = models.TextField(blank=True)

class Client(models.Model):
    name = models.CharField(max_length=256)
    user = models.ForeignKey(User)
    bio = models.TextField(null=True, blank=True)
    website = models.URLField(null=True)
    rights = models.ManyToManyField(Rights)

您可以使用

c = Client.objects.get(id=1)
rights = c.rights.all()
于 2013-04-22T20:15:53.420 回答
1

豪尔赫,对不起,我没有足够的业力直接回复你的评论。

Question: The rights = c.rights.all() will be instance of Rights or instance of the Client?

->Rights实例。

Rights链接到Client对象的所有实例。

于 2013-04-22T22:21:18.907 回答