django admin后台管理修改外键下拉列表显示及其他高级用法

本文一共说四个知识点:

一、修改外键下拉列表显示的字段信息

二、修改list_display显示的外键字段信息

三、search_fields搜索页对外键字段的内容进行搜索

四、list_display_links的作用

下面开始:

先看用户表和订单的models模型

一、修改外键下拉列表显示的字段信息

问题重现:此处的User是对应的一张继承AbstractUser的用户表,默认显示的该用户表的username字段,现在需要将它修改显示用户表里的其他字段信息

我这里修改为用户表里的username加openid字段:

1,自定义一个继承django.forms.ModelChoiceField的类并重写label_from_instance方法,返回username加openid的组合

2,重写ModelAdmin里的formfield_for_foreignkey方法,判断db_field.name是否等于外键名(这个名字是models模型里的字段名),并调用上面的自定义类。

修改完成之后的效果:

二、list_display显示外键字段信息

问题重现:在list_display上直接填写外键字段user,默认显示的是用户表里的username字段信息,现需要修改为用户表里的其他字段信息进行显示(这里还是修改为openid)

修改USER列:在list_display里添加openid(这里可以不与模型里的字段一致,但是后面用的需要与这里的一致),再定义一个同名方法,该方法返回外键字段user里的openid。 可使用openid.short_description对list_display修改显示的列名。

三、search_fields搜索页对外键字段的内容进行搜索

问题重现:默认情况下,在search_fields属性里不能直接填写外键的模型名称,否则在搜索的时候会报错。比如下图的user是外键

需要将上面的user修改为 外键名__字段名 ,如 user__openid,这样就能对关联外键user的openid进行搜索了

四、list_display_links的作用

问题重现:默认情况下,我们只能点击订单编号进入详情页,但这时我想点击其他信息时也能进入详情页

添加list_display_links后的效果

我希望这篇文章能帮忙到你们~~

猜你喜欢

转载自blog.csdn.net/qq_37140721/article/details/129589841
今日推荐