【问题标题】:Adding fields to user's personal info in Django admin page在 Django 管理页面中向用户的个人信息添加字段
【发布时间】:2012-07-13 14:32:37
【问题描述】:

我刚刚开始了一个 Django 项目(其中没有应用程序)。我在设置文件中激活了admin,并且可以访问 Django 管理页面。 django页面有添加用户的栏目;在添加用户时,我只在个人信息下获得三个字段,但我需要存储更多关于用户的信息。我搜索了一下,发现我可以使用用户配置文件来完成此操作。我试过了,但我遇到了问题。

我的目标是在用户表中再添加三个字段:

  1. 角色
  2. 联系电话
  3. 其他

我需要以下详细信息:我需要编写哪个函数以及在哪里执行此操作。

我找到了this,但是我不知道我需要在哪里写这些步骤。对此我将不胜感激。

【问题讨论】:

    标签: django django-admin user-profile


    【解决方案1】:

    Django 用户配置文件是您所需要的。您链接到的博客有明确的步骤。您可以查看 Django 文档。 http://www.turnkeylinux.org/blog/django-profile 也提供了很好的解释。 基本上,您需要创建一个新模型,用户为 ForeignKey,并将settings.py 中的模型定义为AUTH_PROFILE_MODULE = "django_app.your_profile_modelname"。像任何其他模型一样创建配置文件并保存它,然后使用user.get_profile()访问它

    添加一些内容以回答您的以下问题: 首先,不要将应用程序创建为目录。使用startapp <appname> [destination],如此处所述。这将创建应用程序目录。 其次,您必须将应用程序添加到项目设置文件中的INSTALLED_APPS,执行syncdb。基本上,按照Django tutorial on writing your first app 中的步骤操作。 第三,UserProfile 是一个单独的模型。它不是User 的扩展。它与User 相关联只是因为您将User 添加为ForeignKey。 第四,为了能够在 admin 中查看用户配置文件模型,您完全按照 do to add any other model to admin page 的方式进行操作。在您的应用下创建一个文件名admin.py

    from django.contrib import admin
    from myproject.app.models import UserProfile
    admin.site.register(UserProfile)
    

    【讨论】:

    • 如您和 turkeylinux 网站所述,我在名为 apps 的目录下创建了一个名为 models.py 的文件,然后在我的网站上添加了 AUTH_PROFILE_MODULE = 'mysite.apps.UserProfile' 项目名称,apps 是mysite 目录中的一个目录,在这个应用程序目录中,我创建了具有以下内容的文件 models.py
    • from django.db import models from django.contrib.auth.models import User class UserProfile(models.Model): user = models.ForeignKey(User, unique=True) url = models.URLField( "网站", blank=True) company = models.CharField(max_length=50, blank=True) User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0]) 然后使用命令同步db,之后我再次检查了我的管理页面,没有可用的额外字段。我仍然得到相同的三个字段名字、姓氏和电子邮件。我的目标是在数据库中添加更多字段并使用管理页面填充。
    • 您在管理页面的UserProfile 模型中看到了哪些字段?您已将字段添加到 UserProfile,而不是 User。因此,它们将在 UserProfile 模型下可见。
    【解决方案2】:

    需要理解三个关键概念:

    1. 除了有限的auth 应用程序之外,Django 中没有内置的“配置文件”系统,该应用程序实际上仅适用于用户登录。您应该自己动手。
    2. 个人资料记录本身并没有什么神奇之处,它就像任何其他将User 作为外键的记录(或者,更准确地说,是one-to-one field as per the docs)。您可以通过创建自定义 django 应用(传统上称为 profiles)和该应用的模型(传统上称为 UserProfile,因为不允许将 Profile 作为模型名称)来创建它。
    3. UserProfile 设置为模型的唯一原因是将其指定为AUTH_PROFILE_MODULE,这意味着在User 记录上调用.get_profile() 时可以访问它。就是这样。如果您像这样设置UserProfile

      def UserProfile(models.Model):
          user = models.OneToOneField(User, related_name='profile')
          other fields
      

      那么您也可以使用user.profile 而不是某些人喜欢的user.get_profile() 访问个人资料。

    同样,配置文件模型并没有什么神奇之处——它只是一个模型记录,就像任何其他模型记录一样。

    如果您希望能够在更复杂的用户表单中编辑其他字段;最简单的方法可能是取消注册User,然后使用您的自定义ModelAdmin 和表单类再次注册,但根据您的问题判断,您可能还没有达到那个级别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 2021-04-29
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多