基于组的Django用户的条件属性

基于组的Django用户的条件属性,django,django-models,django-forms,Django,Django Models,Django Forms,给定的用户可以是以下零个或多个类别: 楼层工作人员 managers 所有者 如果用户是楼层员工,他们需要额外的属性(例如资历和员工类型) 我最初的尝试是这样的: 为每个类别创建一个组(这似乎是有意义的,因为每种类型的用户在站点中应该有不同的权限) 使用所需的额外属性和与用户的1对1关系创建FloorStaff模型 分别处理User创建和FloorStaff创建(即使用单独的表单,单独访问)。创建FloorStaff的表单自动将User添加到FloorStaff组 虽然这是可行的,但将新

给定的
用户
可以是以下零个或多个类别:

  • 楼层工作人员
  • managers
  • 所有者
如果用户是
楼层员工
,他们需要额外的属性(例如
资历
员工类型

我最初的尝试是这样的:

  • 为每个类别创建一个
    (这似乎是有意义的,因为每种类型的用户在站点中应该有不同的权限)
  • 使用所需的额外属性和与
    用户的1对1关系创建
    FloorStaff
    模型
  • 分别处理
    User
    创建和
    FloorStaff
    创建(即使用单独的表单,单独访问)。创建
    FloorStaff
    的表单自动将
    User
    添加到
    FloorStaff
虽然这是可行的,但将新的楼层员工添加到站点并不是最直观的方法。从管理者的角度来看,填写两张表格来添加一名员工没有什么意义。也就是说,如果我雇用新员工,我应该能够填写一份“新员工”表格,其中包括在添加员工基本信息的同时将所述员工添加到正确的类别中,如果该员工是
楼层员工
,则还应添加额外的属性

我一直在尝试创建一个包含额外属性的自定义用户模型,但考虑到并非所有
user
s都是
FloorStaff
,这感觉是错误的

在这一点上,我所能想到的就是构建一个自定义视图和HTML表单,但这似乎也违背了Django的思维方式


最“精确”的方法是什么?

我建议将“资历”和“员工类型”作为可选字段,然后创建一个自定义模型管理员,在“楼层员工”为真时强制提供这些字段。

我建议将“资历”和“员工类型”作为可选字段,然后创建一个自定义模型管理员,在floor staff为真时强制提供这些字段

我可以问一下您的理由吗?这是我看到的最简单、最“按部就班”的方法。您可以使用现有的类,并显式地描述模型的“法则”。我看到的唯一缺点是,最终结果不会由数据库强制执行——只有管理员执行,因此,如果您想使用Django Rest Framework之类的东西,它就不会知道您的modeladmin类。如果你没有这样的用例,这是最好的选择。啊,酷,好吧。我确实计划最终增加DRF,但我想当我达到这一点时,我会越过这座桥。我可以问一下你的理由吗?这是我看到的最简单和最“按常规”的方法。您可以使用现有的类,并显式地描述模型的“法则”。我看到的唯一缺点是,最终结果不会由数据库强制执行——只有管理员执行,因此,如果您想使用Django Rest Framework之类的东西,它就不会知道您的modeladmin类。如果你没有这样的用例,这是最好的选择。啊,酷,好吧。我确实计划最终增加DRF,但我想当我到达它时,我会跨过那座桥。