如何扩展模型用户?

时间:2014-04-30 14:14:23

标签: python django

请帮助解决这个问题

我在django1.6用户模型中扩展如下:

class UserProfile(User):    
        ......
        ......

    family = models.CharField(
        max_length=30, 
        blank=True,
    )
    skype = models.CharField(
        max_length=50, 
        blank=False,
    )
    email_address = models.EmailField(
        max_length=50, 
        blank=True,
    )   

    .....
    ....

    objects = UserManager()

导致adminpanel出现上述字段的表单。填写完数据后,将数据存储在数据库表中,{34} {#3}}"。此表链接到表格" app_userprofile"使用外键。

问题是表" auth_user"字段"用户名"和#34;密码"空的。但每个用户都需要。

请在新用户注册(管理员面板和网站)数据"用户名"之后告诉我如何操作。和#34;密码"落入表格" auth_user"

3 个答案:

答案 0 :(得分:1)

我认为你需要使用AbstractUser模型。如果从User模型继承UserProfile,您将获得2个具有相同字段的表,当您填写app.UserProfile密码字段时 - 值不会出现在auth.User表中。

当然你可以这样做:https://stackoverflow.com/a/23390975/1761844但更好的方法 - 创建你自己的自定义用户:

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
   ... your custom fields ...

并添加到您的settings.py

AUTH_USER_MODEL = 'app.CustomUser'

在此之后,您将获得包含自定义字段的用户模型。您可以在以下应用中导入它:

from django.contrib.auth import get_user_model
User = get_user_model()

并制作这样的外键:

owner = models.OneToOneField(settings.AUTH_USER_MODEL)

链接到django文档:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#extending-django-s-default-user

答案 1 :(得分:0)

使用一对一字段,User.profile将在第一次访问user.profile时创建Profile对象:

from django.contrib.auth.models import User
from django.db import models

class Profile(models.Model):
    user = models.OneToOneField(User, unique=True)


User.profile = property(lambda u: Profile.objects.get_or_create(user=u)[0])

答案 2 :(得分:0)

首先,改变UserProfile,就像上一个答案中提到的那样。之后,请检查此答案:https://stackoverflow.com/a/4565957,因为它解释了如何在单个管理页面上组合用户和用户个人资料表单。然后,您将能够通过一次保存添加用户和他/她的个人资料。

还有其他方法可以解决您的问题:您可以使用所需的所有字段定义自定义用户模型,将用户名,密码,系列和其他数据合并到一个表中。查看此页面以获取参考:https://docs.djangoproject.com/en/1.6/topics/auth/customizing/#specifying-a-custom-user-model