请帮助解决这个问题
我在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"
答案 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。