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

Esc*_*alo 5 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)
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用两个来创建咨询作为单独的模型ForeignKeys:to Lawyerto to Client; 您还可以通过创建Resource带有ForeignKeyto 的模型来向咨询(例如文档或类似的东西)添加资源Consultation.

这种方法很难区分用户:例如,您如何知道a是否user是a Firm- 您需要多次查询数据库或将其分配Profile给通用User对象.

你也可以只添加ProfileUser和包括Role,然后你道基础上的意见和认证user.get_profile().role.

你会如何处理这个问题?

Spi*_*nim 5

我会在这里做你的建议:

您还可以仅向用户添加配置文件并包含角色,然后根据user.get_profile().角色引导视图和身份验证.

创建一个包含角色选择字段的配置文件.创建一些像@lawyer_only这样的装饰器,确保您的视图只能由Lawyer角色用户访问.