Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Django模型:如何表达以下逻辑。。。?_Database_Django_Django Models_Many To Many_One To Many - Fatal编程技术网

Database Django模型:如何表达以下逻辑。。。?

Database Django模型:如何表达以下逻辑。。。?,database,django,django-models,many-to-many,one-to-many,Database,Django,Django Models,Many To Many,One To Many,我在模式方面遇到了困难,我需要以下逻辑方面的帮助 我有一个表客户端和一个表权限。表Client表示具有某些属性的客户端,表Rights表示每个客户端的可用权限 因此,我想为客户机分配一个可用权限列表(每个用户可以拥有不同的权限,但所有权限都来自表rights),如何在模型中实现 之后,我如何为客户检索分配给他的权限 客户 权利 提前谢谢 只需在客户端模型中使用一个字段即可。毕竟,这是一种多对多的关系 如果每个权限对每个客户机都是唯一的,则使用权限到客户机的ForeignKey。只需在客户机模型中

我在模式方面遇到了困难,我需要以下逻辑方面的帮助

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

因此,我想为客户机分配一个可用权限列表(每个用户可以拥有不同的权限,但所有权限都来自表
rights
),如何在模型中实现

之后,我如何为
客户
检索分配给他的
权限

客户 权利 提前谢谢

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

如果每个权限对每个客户机都是唯一的,则使用权限到客户机的ForeignKey。

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

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

使用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()
使用多个字段

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

乔治,对不起,我没有足够的因果报应来直接回复你的评论

Question: The rights = c.rights.all() will be instance of Rights or instance of the Client?
->
权限
实例


所有链接到
客户端
对象的
权限
实例。

Jorge,对不起,我没有足够的业力直接回复您的评论

Question: The rights = c.rights.all() will be instance of Rights or instance of the Client?
->
权限
实例


所有链接到
客户端的
权限
实例。

问题:
权限=c.Rights.All()
将是
权限的实例
客户端的实例
权限
将是一个查询集,并将告诉您分配给客户端
c
的所有权限
c
是客户端的一个实例。问题:
rights=c.rights.all()
将是
rights
的实例,或者
Client
的实例?
rights
将是一个查询集,并将告诉您分配给客户端
c
的所有权限
c
是客户端的一个实例。我对它进行了一些测试,发现它既不能识别为
Right
也不能识别为
Client
,而是识别为
django.db.models.query.QuerySet
。示例:
isinstance(,django.db.models.query.QuerySet)
给出了
True
是的它是一个包含权限实例的QuerySet
print rights[0]
我对它进行了一些测试,发现它既不能识别为
Right
也不能识别为
Client
,而是识别为
django.db.models.query.QuerySet
。示例:
isinstance(,django.db.models.query.QuerySet)
给出了
True
是的它是一个包含权限实例的QuerySet<代码>打印权限[0]