Django 扩展 User 字段:使用 OneToOneField 与 Admin Inlines 实现

竹里
竹里
发布时间:2026-10-13| 4人浏览过
原创

本文介绍如何在 Django 中通过 OneToOneField 扩展内置 User 模型,并配置 Admin 后台使用 StackedInline 实现内联编辑。涵盖模型定义、Admin 注册及关联数据查询技巧,包括使用双下划线语法进行跨表筛选。

Django 扩展 User 模型的基本原理

在 Django 中扩展内置的 User 模型,通常采用一对一关系(OneToOneField)来存储额外的用户信息。

定义一对一关联模型


class Profile(models.Model):
 user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name='昵称')
 nickname = models.CharField(max_length=20)
 
 def __str__(self):
  return '<Profile: %s for %s>' % (self.nickname, self.user.username)

Admin 后台内联配置

接下来需要在 admin.py 文件中配置后台管理界面,以便在用户管理页面中直接编辑扩展字段。

配置 StackedInline 与 UserAdmin


from django.contrib import admin
from django.contrib.auth.models import User
from .models import Profile
 
 
class ProfileInline(admin.StackedInline): #将Profile加入到Admin的user表中,内联
 model = Profile
 can_delete = False
 
class UserAdmin(admin.ModelAdmin):
 inlines = [ProfileInline]
 list_display = ('username', 'nickname', 'email', 'is_staff', 'is_active', 'is_superuser')
 
 def nickname(self, obj):
  return obj.profile.nickname #自定义字段显示信息
 
 nickname.short_description = '昵称'
 
# Re-register UserAdmin
admin.site.unregister(User) #去掉在admin中的注册
admin.site.register(User, UserAdmin) #用UserAdmin注册user

OneToOneField 工作机制与取值示例

补充知识:Django model onetoonefield的工作模式

OneToOneField 实现了一对一关联机制,确保每条记录只对应关联表中的一条信息。关联键即为该字段的主键(id),这保证了数据的唯一性和直接映射关系。

具体用法如下:

1、取值操作

假设 User 为 Django 自带的用户表,我们需要关联一个详细信息表,其模型类为 UserBaseMsg(对应数据库表 user_base_msg),以及另一张存储员工状态信息的表,模型类为 UserWorkMsg(对应表 user_work_msg)。在这两张关联表中,外键字段均命名为 user,指向主 User 表。

若需获取详细信息表中的 a 字段值,以及工作信息表中的 b 字段值,

首先通过 get 方法获取 User 实例:

a = user.userbasemsg.a

b = user.userworkmsg.b

基于关联表的查询技巧

此外,还可以根据关联表的字段筛选 User 信息。

例如,筛选出 UserBaseMsg 中 a 字段等于 c 的 User:

此处 get 方法还可以替换为 filter、exclude 等其他查询条件,以实现更灵活的数据库操作。

在 UserBaseMsg__a 后,可以追加各种查询条件后缀来细化筛选结果。

常用的查询条件后缀包括:

__in = # 用于筛选字段值在给定列表范围内的记录

__gt = # 用于筛选字段值大于指定值的记录

__gte = # 用于筛选字段值大于或等于指定值的记录

__lt = # 用于筛选字段值小于指定值的记录

__lte = # 用于筛选字段值小于或等于指定值的记录

以上关于 Django 扩展 User 字段并使用 Inlines 配置的方法即为全部内容,希望能为开发者提供参考与帮助。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。