首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django:使list_display与实际变量不同

在Django框架中,list_display是一个在管理界面中用于显示模型实例列表时自定义列的属性。通常,我们会将模型的字段直接作为list_display的一部分,但有时候我们可能希望显示的内容与模型实际的字段不同,这通常是为了展示计算后的值、关联模型的字段或者进行一些自定义的处理。

基础概念

list_display定义在Django的ModelAdmin类中,用于控制在管理界面的列表视图中显示哪些列。默认情况下,它会显示模型的所有字段。

相关优势

  • 自定义展示:允许开发者根据需求自定义展示内容,提高管理界面的可用性和信息的丰富性。
  • 计算字段:可以在列表中显示计算后的结果,比如求和、平均值等。
  • 关联模型字段:可以展示与当前模型关联的其他模型的字段。

类型

  • 模型字段:直接使用模型的字段。
  • 方法:在ModelAdmin中定义一个方法,返回需要展示的值。
  • 属性:模型中定义的属性。
  • 匿名函数:使用lambda表达式。

应用场景

假设我们有一个Book模型和一个Author模型,我们希望在书籍列表中显示作者的名字而不是作者的ID。

代码语言:txt
复制
from django.contrib import admin
from .models import Book, Author

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author_name')

    def author_name(self, obj):
        return obj.author.name
    author_name.short_description = 'Author Name'

admin.site.register(Book, BookAdmin)

遇到的问题及解决方法

问题

如果在使用自定义方法时遇到'NoneType' object has no attribute 'name'这样的错误,通常是因为某些书籍没有关联的作者。

原因

这可能是因为数据库中存在孤立的书籍记录,即它们没有与任何作者关联。

解决方法

在自定义方法中添加检查,确保关联的对象存在。

代码语言:txt
复制
def author_name(self, obj):
    return obj.author.name if obj.author else 'Unknown'

或者,如果你希望在列表中明确标记出没有作者的书籍,可以这样做:

代码语言:txt
复制
def author_name(self, obj):
    return obj.author.name if obj.author else 'No Author'

参考链接

通过上述方法,你可以灵活地在Django管理界面的列表视图中展示与模型实际字段不同的内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 爱快如何三层交换机对接?使不同的VLAN走不同的宽带?

    客户诉求:1、ERP服务器使用专线连接外网,且需要被外网访问,便于高管随时用手机审批;2、有线网络和WIFI划分为不同的VLAN,并且分别用两宽带上网。...5、端口分流配置,也就是说指定不同的网段走不同的宽带: (1)服务器(192.168.1.2-192.168.1.20,其实暂时没那么多服务器,预留一下为好)走固定IP的城域网 (2)192.168.3.0...总之,分流配置完成以后,就是下图所示: 6、端口映射,为了使服务器上相应的服务,能在互联网上被访问,我们必须要配置端口映射,举例如下: 注意:为安全起见,外网端口建议不采用实际的服务端口,图中9002

    2.8K30

    Django3.2边学边记—Adimn站点管理

    浏览器端登录页面:类似以下后缀 1 http://127.0.0.1:8000/admin/ ---- 管理页面显示 创建模型管理类来管理某个模型在后台显示的页面形式 ModelAdmin类可以控制不同模型在...控制显示的列,Django 会尝试按照这个顺序解释 list_display 的每个元素: 一个模型的字段。 一个可调用对象。 一个代表 ModelAdmin 属性的字符串。...list_display = ['id','title','pub_date']   或者模型方法,要求方法有返回值,如下在模型类中定义一个方法  1234 class TestInfo(models.Model...empty_value='空', description='父级地名', ordering='id',boolean=True)    def title2(self,obj): #注意这里obj 随便一个变量名就行...,在模型中定义多了这个参数         return obj.title    admin.site.register(Test, TestAdmin) 过滤器 用 list_filter 来激活管理更改列表页面右侧侧栏的过滤器

    1.3K30

    实习第五周

    枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。...在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。...的ckeditor http://www.nanerbang.com/article/2/ 8.Django配置分页 1.内置django分页插件: view.py引入 from django.core.paginator...后台字段显示方式,以及搜索框 class MyWebPostAdmin(admin.ModelAdmin): list_display = ('title', 'timestamp...[](/media/%s)' % self.img admin_image.allow_tags = True admin.py list_display = ('admin_image

    41510

    Django 1.10中文文档-第一个应用Part7-自定义管理站点

    关于这些方法属性的更多信息,请参见list_display。      我们还可以对显示结果进行过滤,通过使用list_filter属性。...过滤器显示的筛选类型取决你过滤的字段,由于pub_data是DateTimeField,所以Django就自动给出了“今天”、“过去7天”、“本月”、“今年”这几个选项。 这一切进展顺利。...在实际的项目中,您可以使用django.contrib.admin.AdminSite。siteheader属性更容易实现这个特殊的定制。...编辑该文件,你会看到文件内使用了一个app_list模板变量。该变量包含了所有已经安装的Django应用。...快速通道 Django 1.10中文文档-第一个应用Part1-请求响应 Django 1.10中文文档-第一个应用Part2-模型和管理站点 Django 1.10中文文档-第一个应用

    3.6K60

    Django流程_菜鸟裹裹收费标准

    Django 教程 一、Django 安装 1、Django 版本对应的 Python 版本: 2、Django下载地址: 3、安装(无需下载) 4、验证安装 cmd进入python 获取版本信息 二、...应用目录下创建一个urls.py文件 12、模板的基本使用 a、概述: b、创建模板目录 c、配置模板路径 d、定义grades.html和students.html两个模板 模板语法 { {输出值,可以是变量.../F 4、目录层级说明 manage.py 一个命令行工具,可以让你以各种方式Django项目进行交互 init.py 一个空文件,告诉Python该项目是一个Python包 settings.py...list_filter 过滤字段 search_fields 搜索字段 list_per_page 分页 添加修改属性 fields 属性先后顺序 fieldsets 给属性分组 注意:fieldsfieldsets...os.path.join(BASE_DIR,'templates')], 'APP_DIRS': True, d、定义grades.html和students.html两个模板 模板语法 { {输出值,可以是变量

    1.3K30

    Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段

    在列表页中点击"增加"可以进入增加页,Django会根据模型类的不同,生成不同的表单控件,按提示填写表单内容后点击"保存",完成数据创建,创建成功后返回列表页。...Django提供了自定义管理页面的功能,比如列表页要显示哪些值。 打开assetinfo/admin.py文件,自定义类,继承自admin.ModelAdmin类。...属性list_display表示要显示哪些属性 class ServerInfoAdmin(admin.ModelAdmin): list_display = ['id', 'server_hostname...from .models import ServerInfo,MiddlewareInfo,ScriptInfo class ServerInfoAdmin(admin.ModelAdmin): list_display...MiddlewareInfo,ScriptInfo @admin.register(ServerInfo) class ServerInfoAdmin(admin.ModelAdmin): list_display

    2.8K40
    领券