Django Models:如何表达以下逻辑......?

时间:2013-04-22 19:01:02

标签: database django django-models many-to-many one-to-many

我在架构上面临困难,我需要帮助以下逻辑。

我有一张表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)

提前致谢!

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

使用ManyToManyField

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()

答案 2 :(得分:1)

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

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

- > Rights个实例。

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