from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
mobile = models.CharField(max_length=16)
# if your additional field is a required field, just add it, don't forget to add 'email' field too.
# REQUIRED_FIELDS = ['mobile', 'email']
class UserProfile(models.Model):
#required by the auth model
user = models.ForeignKey(User, unique=True)
middle_name = models.CharField(max_length=30, null=True, blank=True)
from django.contrib.auth.models import User
class Employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
department = models.CharField(max_length=100)
这样,您就可以从用户模型中查询新字段:
>>> u = User.objects.get(username='fsmith')
>>> freds_department = u.employee.department
如果你想调整管理员配置文件中的用户数据,你可以这样编辑你的admin.py:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
from my_user_profile_app.models import Employee
# Define an inline admin descriptor for Employee model
# which acts a bit like a singleton
class EmployeeInline(admin.StackedInline):
model = Employee
can_delete = False
verbose_name_plural = 'employee'
# Define a new User admin
class UserAdmin(BaseUserAdmin):
inlines = (EmployeeInline,)
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
5条答案
按热度按时间gk7wooem1#
推荐的方法是创建一个新模型,并为它提供一个内置
User
模型的OneToOneField()
,如下所示:等等。
然后,您可以按如下方式访问字段:
unhi4e5o2#
我知道已经太晚了,Django从那时起已经改变了很多,但是对于求知者来说,
根据Django文档,如果你对用户模型很满意,并且只想添加一些额外的字段,请执行以下操作:
1-您的
models.py
应该如下所示:2-将其添加到
setting.py
搞定!
现在您可以运行
python manage.py syncdb
laximzn53#
我不知道一步一步来(尽管我相信一个坚实的谷歌会产生一些东西),但这里有一个快速的尝试。
1)创建一个
UserProfile
模型来保存额外的信息,并将其放入您的models.py
中。2)通过添加以下行(使用适当的名称),告诉
settings.py
有关新类的信息:3)添加一个信号监听器,在添加新用户时创建一个空白的
UserProfile
记录。您可以找到一个很棒的代码片段,其中包含here的说明。4)在处理新用户记录时,您也可以填充
UserProfile
记录,下面是我如何执行插入操作(注意get_profile):这就是它的全部。这并不全面,但应该为你指明正确的方向。
**更新:**请注意,
AUTH_PROFILE_MODULE
自v1.5起已弃用:https://docs.djangoproject.com/en/stable/releases/1.5/#auth-profile-modulezpgglvta4#
我几乎在2023年到达。此刻的Django在4.1.4上...
如果你想扩展用户模型而不替换它,按照django文档你可以:
1.如果您的更改纯粹是行为性的,并且不需要更改数据,请基于用户模型创建代理模型。
1.在新模型中使用OneToOneField。这样,您可以向现有用户模型添加更多字段:
这样,您就可以从用户模型中查询新字段:
如果你想调整管理员配置文件中的用户数据,你可以这样编辑你的
admin.py
:fiei3ece5#
它只是另一个模型,你操纵它的方式和操纵你遇到的其他模型的方式完全一样。