python—django24

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)

python—django24

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)

python—django24

如果想让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)