2012-07-13 40 views
1

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

我的目标是三个字段添加到用户表:

  1. 作用
  2. 联系电话
  3. 其他

我需要一个像详细信息:哪些功能我需要写和在哪里做到这一点。我发现this,但我不知道在哪里写这些步骤。我将不胜感激对此的更加清楚的解释。

回答

3

Django用户配置文件是你需要的。您链接到的博客有明确的步骤如何做到这一点。你可以查看Django文档。 http://www.turnkeylinux.org/blog/django-profile也提供了很好的解释。 基本上你需要用User作为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。 第四,为了能够在管理员中看到用户个人资料模型,您完全可以做到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) 
+0

由您和turkeylinux网站所描述的,我创建了一个名为下了一个名为应用models.py一个文件,然后添加AUTH_PROFILE_MODULE =“mysite.apps.UserProfile”在这里我网站上的项目名称,应用程序是mysite的目录中的目录,这个程序目录内我创造具有django.db进口机型以下内容 – xrage 2012-07-13 15:25:28

+0

从django.contrib.auth.models导入文件models.py用户 类用户配置(models.Model): 用户= models.ForeignKey (User,unique = True) url = models.URLField(“Website”,blank = True) company = models.CharField(max_length = 50,blank = True) User.profile = property(lambda u:UserProfile。 OBJ ects.get_or_create(user = u)[0]) 然后使用命令来同步数据库,之后,我再次检查我的管理页面没有额外的可用字段。我仍然得到相同的三个字段的名字,姓氏和电子邮件。我的目标是在数据库中添加更多的字段并使用管理页面填充。 – xrage 2012-07-13 15:31:44

+0

你在管理页面的'UserProfile'模型中看到了哪些字段?您已将字段添加到'UserProfile',而不是'User'。因此,它们将在'UserProfile'模型下可见。 – zaphod 2012-08-06 19:32:43

1

有三个关键的概念理解:

  1. 没有内置在Django的“档案”系统,超越有限auth应用程序,它是真正适合用户登录。预计你会推出自己的产品。
  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和表单类再次注册它,但根据您的问题来判断,您可能尚未达到该级别。

相关问题