【问题标题】:Django--Model Construction (User Profile or Seperate Model)Django--模型构建(用户配置文件或单独模型)
【发布时间】:2011-10-09 00:39:02
【问题描述】:

标题的措辞可能有点混乱。我有一个应用程序的用户具有不同的权限级别(管理员和非管理员)。

我不确定以下哪种结构更可取:只需使用 User_Profile 并添加一个管理字段或创建两个模型(一个用于 admin,一个用于 )

class User_Profile(models.Model):       
    user=models.ForeignKey(User, unique=True)
    employer=models.ForeignKey(Company,blank=True)
    admin=models.BooleanField(default=False)
    phone=models.CharField(blank=True)

这是否比为仅通过 ForeignKeys 链接到 User 和 Employer 的管理员创建单独的表更可取?我的视图将检查每个用户的管理员状态,因此我担心一遍又一遍地查询大型 User_Profile 表可能会变得昂贵。

可能还没有到优化这个的阶段,但我只是对最佳实践感到好奇。

【问题讨论】:

    标签: mysql django models


    【解决方案1】:

    我实际上会推荐 Django 的内置用户权限,而不是这些选项中的任何一个: https://docs.djangoproject.com/en/dev/topics/auth/#methods

    以下是帮助您入门的快速教程: http://parand.com/say/index.php/2010/02/19/django-using-the-permission-system/

    【讨论】:

    • 那个教程很棒。我知道 Django 的 Group/Permission 功能,但以前从未使用过它。事情就是这样,我不确定在这种情况下如何实现它。我是否应该为每个公司 """company=Group(companyX)""" 动态创建一个组,然后为该公司的管理员 """company_admin=Group(companyX_admin)""" 创建第二个组?在这种情况下,这似乎是处理它的方式,但感觉有点笨拙......也许不是。
    • 另外,为了让我在编码方面不断进步,我很好奇为什么这种方法更可取。使用我原来的选项,我将不得不将用户(从请求对象)加入用户配置文件,然后查找管理列。现在我通过 M2M 关系从用户转到组。那正确吗?为什么这样更好?非常感谢 RS!
    • @Brandon Django 实际上将权限与模型相关联,而不是模型实例,这听起来像是你想做的(没有通用的管理员集,而是每个公司都有自己的管理员集.) 我相信在这种情况下,您实际上可能最好将管理字段添加到您的用户配置文件中。这比创建 Admin 模型更可取。如果您还没有,请查看本教程,了解如何使用 UserProfile 模型扩展 User 模型,这将有助于减少查询数量:b-list.org/weblog/2006/jun/06/django-tips-extending-user-model
    • 感谢滚动。我实际上熟悉扩展用户模型。我知道您可以利用某些经理命名约定。没想到它比简单的外键关系好得多,但我会再检查一下。
    猜你喜欢
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多