【发布时间】:2011-03-20 20:48:09
【问题描述】:
我正在寻找一种方法来限制我可以通过模型获得的查询集。
假设我有以下模型(有依赖关系):
Company
|- Section
| |- Employee
| |- Task
| `- more models...
|- Customer
| |- Contract
| |- Accounts
| `- other great models ...
`- some more models...
应该注意的是,我的真实模型要深得多,而且与业务无关。
使用上下文处理器,我添加了一个公司实例来请求:
def magic_view(request):
request.company # is a instance of Company model
现在我的问题是将 Company 的子模型的访问权限限制为 company 的请求实例的最佳方法是什么?
我可以把它变成task = Task.objects.get(pk=4,section__task=task),但如果我的模型结构越来越深,这是一个不好的方法。
编辑:我可以给其他模型一个公司的外键,但这是存储冗余关系的好习惯吗? 编辑 2: 不,不是。见Is it bad to use redundant relationships?。
【问题讨论】:
-
“但是如果我的模型结构越来越深,这是一个不好的方法”?你的模型是关系型的。不分层。它不需要遵循严格的层次结构。你为什么要强加一个很深的等级制度?关系数据库并不是为了这个原因而使用的。为什么要这样做?
-
公司、部门、员工等都是模型。所以 Section 有一个 Company 的外键。我可以给其他模型一个公司的外键,但这样关系被保存了两次..
-
"我可以给其他模型一个公司的外键" 你为什么不呢?员工在不改变公司的情况下从一个部门转移到另一个部门。
-
嗯...我想避免在database normalization 中存储冗余关系,但似乎不是。
标签: python django database-design django-models