假设您有一个不同类型的用户可以签名的应用程序:公司,律师和客户。公司有很多律师;律师有很多客户。当然,对于公司用户而言,观点与律师用户的观点不同;这两者与客户端用户不同。
您如何为三个不同的用户建模?我可以考虑以下方法:
具有ForeignKey
到User
的三种不同模型,每种模型都有自己的字段,例如:
class Firm(models.Model):
user = models.ForeignKey(User)
class Lawyer(models.Model):
user = models.ForeignKey(User)
specialty = models.CharField(max_length=100)
class Client(models.Model)
user = modelsForeignKey(User)
现在,您可以使用两个ForeignKeys
:Lawyer
和Client
创建一个单独的模型进行咨询;您还可以通过使用Resource
到ForeignKey
创建模型Consultation
,为咨询(例如文档或类似内容)添加资源。
这种方法很难区分用户:例如,您如何知道user
是否是Firm
- 您需要多次查询数据库或分配{{1}通用Profile
对象。
您还可以只向User
添加Profile
并添加User
,然后根据Role
引导视图和身份验证。
你会如何处理这个问题?
答案 0 :(得分:5)
我会按照你的建议去做:
您还可以只向用户添加配置文件并包含角色,然后根据user.get_profile()。role通道视图和身份验证。
创建一个包含角色选择字段的配置文件。创建一些像@lawyer_only这样的装饰器,确保您的视图只能由律师角色用户访问。
答案 1 :(得分:0)
您还可以考虑继承User模型(模型继承): http://docs.djangoproject.com/en/dev/topics/db/models/#model-inheritance
您必须选择多表继承http://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance,因为User类不是抽象模型。