python+django:24、表关联及展示

本文介绍如何在Django中使用OneToOneField关联用户表和用户详细信息表,并展示如何在admin界面中整合两个表的字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OneToOneField(to)有一个必填的参数,to表示要关联的表

models.py文件:新增一个用户详细信息表,关联之前的用户Users表

class Userdetail(models.Model):
    username = models.OneToOneField(Users,on_delete=models.CASCADE,verbose_name='姓名')
    tel = models.CharField(max_length=11,verbose_name='电话')
    mial = models.CharField(max_length=20,verbose_name='邮箱')
    city = models.CharField(max_length=11,verbose_name='居住地')

    class Meta:
        verbose_name_plural="用户详细信息"
        verbose_name = "用户_个人资料"
inlines关联显示

为了让 userdetail 里面信息和users的信息在一个页面上展示,这里需用到  inlines 参数,关联过去。
先写一个MoreInfo类,继承了admin.StackedInline
StackedInline是让关联的字段纵向显示,TabularInline是横线显示。

admin.py文件内容

class MoreInfo(admin.StackedInline):
	model = models.Userdetail
	
#然后修改原来的controusers
class ControUsers(admin.ModelAdmin):
	list_display=("name","age")
	list_per_page=10
	inlines=[MoreInfo]
admin.site.register(models.Users.ControUsers)

在这里插入图片描述

class MoreInfo(admin.TabularInline):
	model = models.Userdetail
	
#然后修改原来的controusers
class ControUsers(admin.ModelAdmin):
	list_display=("name","age")
	list_per_page=10
	inlines=[MoreInfo]
admin.site.register(models.Users.ControUsers)

在这里插入图片描述

如果想让userdetail中的字段能够显示在user中,可将admin.py的文件修改如下

class ControUsers(admin.ModelAdmin):
	list_display=("name","age","userdetail_city")
	list_per_page=10
	inlines=[MoreInfo]
	def userdetail_city(self,obj):
		return obj.userdetail.city
admin.site.register(models.Users.ControUsers)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值