在Django中为不同类型的用户建模

时间:2010-12-30 19:22:11

标签: django django-models

假设您有一个不同类型的用户可以签名的应用程序:公司,律师和客户。公司有很多律师;律师有很多客户。当然,对于公司用户而言,观点与律师用户的观点不同;这两者与客户端用户不同。

您如何为三个不同的用户建模?我可以考虑以下方法:

具有ForeignKeyUser的三种不同模型,每种模型都有自己的字段,例如:

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)

现在,您可以使用两个ForeignKeysLawyerClient创建一个单独的模型进行咨询;您还可以通过使用ResourceForeignKey创建模型Consultation,为咨询(例如文档或类似内容)添加资源。

这种方法很难区分用户:例如,您如何知道user是否是Firm - 您需要多次查询数据库或分配{{1}通用Profile对象。

您还可以只向User添加Profile并添加User,然后根据Role引导视图和身份验证。

你会如何处理这个问题?

2 个答案:

答案 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类不是抽象模型。