【问题标题】:Where to you monkey patch the Django user model?你在哪里给 Django 用户模型打补丁?
【发布时间】:2011-09-15 02:02:37
【问题描述】:

我想从 Django 修改用户模型。

我的代码:

from django.db import models

from django.contrib.auth.models import User
User.add_to_class('secret_question', models.CharField(max_length="100"))
User.add_to_class('answer', models.CharField(max_length="100"))
User.add_to_class('DOB', models.DateField())

我在哪里放置此代码,以便python manage.py syncdb 将创建正确的表?

我尝试了主目录models.py,我尝试了一个应用程序的目录models.py(这两个没有生成正确的表),我尝试将它放在项目的settings.py中(错误,不能' t运行)。

【问题讨论】:

    标签: python django monkeypatching


    【解决方案1】:

    请查看身份验证文档的Storing additional information about users 部分。它提出了一种向用户对象添加附加信息的更简洁的方法。

    如果您想存储与用户相关的其他信息,Django 提供了一种方法来指定特定于站点的相关模型——称为“用户配置文件”——为此目的。

    【讨论】:

    • 根据我的阅读,用户分析只是创建两个具有一对一关系的表?如果是这种情况,像 select * 这样的某些查询不会需要额外的连接,从而降低效率吗?
    • 我不知道你的项目的范围,但我会先担心可维护性,然后再担心性能。此外,您通过在 User 对象上使用提供的get_profile 方法明确地请求profile - 就在此时查询附加表,我想没有join
    • 我当然会考虑使用用户配置文件技术,但是,您知道如何使用 add_to_class 来实现吗?
    • 我可能会,但我不会在这里详细介绍 - 这不是猴子修补的正确用例 - 抱歉 ;)
    • 大声笑,如果你不回答,那么请回答这个问题:假设我真的很关心性能,但仍然想使用用户身份验证系统和 django,我该怎么做?假设我不使用分析技术。
    【解决方案2】:

    如果你真的想修改用户模型,已经有一个应用程序可以做到这一点。 Django-primate

    模块化 django 用户。

    这个 Django 应用程序猴子补丁 django 为了有一个自定义用户 插入的模型 django.contrib.auth 应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      相关资源
      最近更新 更多