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

如何根据Django Admin中的过滤器动态更改list_view列?

在Django Admin中,您可以通过自定义Admin类来动态更改list_view中的列。以下是一个基本的示例,展示了如何根据过滤器动态更改列。

首先,假设您有一个简单的模型Book

代码语言:txt
复制
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()
    is_published = models.BooleanField(default=False)

然后,在您的admin.py文件中,您可以创建一个自定义的Admin类,并重写get_list_display方法来根据当前的过滤器动态更改列:

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

class BookAdmin(admin.ModelAdmin):
    list_filter = ('is_published',)  # 定义过滤器

    def get_list_display(self, request):
        # 获取当前的过滤器值
        filter_value = request.GET.get('is_published')
        
        # 根据过滤器值决定显示哪些列
        if filter_value == 'true':
            return ('title', 'author', 'publication_date')
        elif filter_value == 'false':
            return ('title', 'author')
        else:
            return super().get_list_display(request)

admin.site.register(Book, Book.class)

在这个例子中,当用户在Django Admin中使用is_published过滤器时,get_list_display方法会根据过滤器的值返回不同的列列表。如果过滤器值为true,则显示所有列;如果为false,则不显示publication_date列。

这种方法的优点是可以根据用户的筛选需求动态展示数据,提高数据查看的效率和用户体验。

如果您遇到问题,比如过滤器没有按预期工作,可能的原因包括:

  1. list_filter设置不正确。
  2. get_list_display方法中的逻辑有误。
  3. 请求中没有正确传递过滤器的值。

解决这些问题的方法包括:

  • 确保list_filter包含了正确的字段。
  • 检查get_list_display方法中的条件判断是否正确。
  • 使用调试工具(如Django的调试模式)来检查请求中的参数。

更多关于Django Admin自定义的信息,可以参考Django官方文档:

希望这个答案能帮助您解决问题。

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

相关·内容

根据数据源字段动态设置报表数量以及宽度

在报表系统,我们通常会有这样需求,就是由用户来决定报表需要显示数据,比如数据源中共有八数据,用户可以自己选择在报表显示哪些,并且能够自动调整列宽度,已铺满整个页面。...本文就讲解一下ActiveReports该功能实现方法。 第一步:设计包含所有报表模板,将数据源所有先放置到报表设计界面,并设置你需要宽,最终界面如下: ?...第二步:在报表后台代码添加一个Columns属性,用于接收用户选择,同时,在报表ReportStart事件添加以下代码: /// /// 用户选择列名称...].Width; // 设置控件坐标 if (tmp == null) { // 设置需要显示第一坐标...源码下载: 动态设置报表数量以及宽度

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

    准备工作 创建管理员用户名和密码:  1 python manage.py createsuperuser   根据提示创建用户名 密码 在admin.py中注册模型类 1234567 from django.contrib...def atitle(self):        return self.title 按以上方法显示是不能排序,如果让这个方法显示也能排序,就给atitle方法.admin_order_field...atitle.short_description='标题'   如果是更改模型字段显示标题,可以在定义模型字段时,设置verbose_name值 ,或者封装成方法,再对方法使用上面那个属性,模型字段不能直接使用那个属性...你可以用empty_value_display 属性更改 123 from django.contrib import admin  ...  ...用 list_filter 来激活管理更改列表页面右侧侧栏过滤器,如下截图所示: list_filter 应是一个元素列表或元组,会将对应字段值列出来,一般用于快速过滤有重复值字段 12

    1.2K00

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

    准备工作 创建管理员用户名和密码:  1 python manage.py createsuperuser   根据提示创建用户名 密码 在admin.py中注册模型类 1234567 from django.contrib...def atitle(self):        return self.title 按以上方法显示是不能排序,如果让这个方法显示也能排序,就给atitle方法.admin_order_field...atitle.short_description='标题'   如果是更改模型字段显示标题,可以在定义模型字段时,设置verbose_name值 ,或者封装成方法,再对方法使用上面那个属性,模型字段不能直接使用那个属性...你可以用empty_value_display 属性更改 123 from django.contrib import admin  ...  ...过滤器 用 list_filter 来激活管理更改列表页面右侧侧栏过滤器,如下截图所示: list_filter 应是一个列表或元组,参数字段可以是模型字段,包括外键字段(注意list_display

    1.3K30

    Django学习笔记 1.7 自定义 admin 站点

    作者: iotisan 前言 这节笔记将更加深入地处理 admin 站点,包括修改表单更加直观呈现模型数据,快速添加关联对象,以及后台涉及列表展示、过滤器、搜索框等操作。...1 自定义后台表单 polls/admin.py 通过 admin.site.register(Question) 注册 Question 模型,Django 能够构建一个默认表单用于展示。...当我们拥有数十个字段表单,我们肯定会期望将表单分为几个字段集,这样会更清晰一点: from django.contrib import admin from .models import Question...默认提供 3 个足够选项字段。” 3 自定义后台更改列表 3.1 显示列表 默认情况下,Django 显示每个对象 str() 返回值。但有时如果我们能够显示单个字段,它会更有帮助。...为此,使用 list_display 后台选项,它是一个包含要显示字段名元组,在更改列表页形式展示这个对象: class QuestionAdmin(admin.ModelAdmin):

    99120

    问与答98:如何根据单元格动态隐藏指定行?

    excelperfect Q:我有一个工作表,在单元格B1输入有数值,我想根据这个数值动态隐藏行2至行100。...具体地说,就是在工作表中放置一个命令按钮,如果单元格B1数值是10时,当我单击这个命令按钮时,会显示前10行,即第2行至第11行;再次单击该按钮后,隐藏全部行,即第2行至第100行;再单击该按钮,...则又会显示第2行至第11行,又单击该按钮,隐藏第2行至第100行……也就是说,通过单击该按钮,重复显示第2行至第11行与隐藏第2行至第100行操作。...图1 如何实现? 注:这是在chandoo.org论坛上看到一个贴子,有点意思。...A:使用VBA代码如下: Public b As Boolean Sub HideUnhide() If b =False Then Rows("2:100").Hidden

    6.3K10

    Django 3.1 官网学习路线

    现在您在“更改列表”页面查看问题。此页面显示数据库所有问题,并允许您选择一个进行更改。有“What's up?”“我们之前提出问题是: 这里需要注意是: 表单是根据问题模型自动生成。...如果在该窗口中添加一个问题并单击“Save”,Django 会将该问题保存到数据库,并在您正在查看“add choice”表单动态地将其添加为选中选项。...要做到这一点,使用 list_display 管理选项,它是一个字段名元组,以形式显示在对象更改列表页面上: polls/admin.py¶ class QuestionAdmin(admin.ModelAdmin...更多关于 list_display 信息看这里 再次编辑您 poll /admin.py 文件,并向问题更改列表页面添加一个改进:使用 list_filter 过滤器。...更改列表分页、搜索框、过滤器、日期层次结构和标题排序都像您认为那样协同工作。

    8.2K10

    Django快速入门——投票程序(7) 自定义后台

    自定义后台 自定义表单 通过admin.site.register(Question)注册Question模型,Django会创建默认表单在后台显示。...但有时需要自定义后台显示,可以通过继承admin.ModelAdmin实现: # polls/admin.py from django.contrib import admin from .models...自定义后台更改列表 现在投票后台页看起来很不错,让我们对问题列表页面进行一些调整——改成一个能展示系统中所有投票页面。默认情况下,Django 显示每个对象 str() 返回值。...为此,使用 list_display属性,它是一个包含要显示字段名元组,在更改列表页形式展示这个对象: class QuestionAdmin(admin.ModelAdmin):...编辑文件 polls/admin.py,将以下代码添加至 QuestionAdmin: list_filter = ["pub_date"] 这样做添加了一个“过滤器”侧边栏,允许人们以 pub_date

    23640

    【ERP最新动态】Winshuttle如何通过嵌套循环更改销售订单明细Schedule Lines

    如果订单后续有交货,则每个明细下至少有一个计划行,用于指定允许交货日期和数量及库存管理等信息,这些都是交付先决条件。...SAP更改销售订单明细计划行操作流程: Winshuttle更改销售订单明细计划行操作流程: 1.登录SAP,输入T-code: VA02开始录制 同上填写销售订单编号之后,与在SAP...操作不同是,需要点击定位按钮定位到明细上,然后点击Schedule lines for item 按钮进入明细计划行。...在创建VA02嵌套循环时,应先创建包含销售订单明细外循环,再创建明细下计划行内循环。常用映射方式为拖拽,选中Excel表格框,按住并向上方对应行拖拽,即为映射。 3....以上为通过Winshuttle嵌套循环方式更改明细Schedule lines具体操作流程。嵌套循环还可以应用于其他业务场景,从而提高脚本灵活性。

    2.9K20

    Django 教程 --- Django视图

    根据Django文档,视图函数是一个Python函数,它接受Web请求并返回Web响应。此响应可以是网页HTML内容,重定向,404错误,XML文档或图像(Web浏览器可以显示任何内容) ?...Django查看范例 使用示例说明如何创建和使用Django视图。...要检查如何使用DjangoMVT(模型,视图,模板)结构制作基本项目,请访问创建项目Django。 视图类型 Django视图分为两大类: 基于功能视图 基于类视图 ?...基于功能视图 基于函数视图是使用python函数编写,该函数以HttpRequest对象作为参数并返回HttpResponse对象。...在geeks/admin.py, from django.contrib import admin from .models import GeeksModel # Register your models

    3K30

    后端框架学习-Django

    参数=值&参数=值 信息片段:#subject锚点,直接定位到网页指定位置 Django如何处理URL?...在该模式下依然存在控制层C,即主路由 Django模板层 模板层创建 模板:根据字典数据动态变化html网页,根据视图中传递字典数据动态生成相应html页面 模板配置: 创建模板文件夹 ...过滤器:在变量输出时对变量值进行处理 可以通过使用过滤器来改变变量输出显示 语法: {{变量|过滤器1:'参数1'|过滤器2:'参数值2'…}} 常用过滤器: lower:转换为小写 upper:...之前内容加上该相对地址作为最终访问地址 url反向解析 指在视图或模板,用path定义别名来动态查找或计算出相应路由。...verbose_name:设置此字段在admin界面上显示名称,可以中文化admin界面 好习惯:字段选项【添加或更改】均要执行 模型类-Meta内部类 使用Meta类来给**模型(其实就是表属性)

    9.4K40

    从0开始做系统

    前面已经写了如何做接口,那是方便调用。现在写个如何做后台系统,是方便操作Django自带后台管理是Django明显特色之一,可以让我们快速便捷管理数据。...后台管理可以在各个appadmin.py文件中进行控制。 假如有个小白,想做个后台系统,如何做,他可以直接用Djangoadmin来弄。...在appmodels定义好字段。...必须 max_length 参数,django根据这个参数在数据库层和校验层限制该字段所允许最大字符数。...,列表时,对Date和DateTime类型进行搜索 inlines,详细页面,如果有其他表和当前表做FK,那么详细页面可以进行动态增加和删除 action,列表时,定制action操作 定制HTML

    1.4K30

    Django Admin后台管理

    , SchoolInfoAdmin) admin.site.register(StudentInfo) 显示效果如下 还可以通过模型管理类list_display属性来自定义显示。...list_display添加get_name方法 list_display = ['id', 'name', 'addr', 'get_name'] 显示效果如下 注:属性在后台管理页面是可以进行排序...,而方法是不能排序,如果需要排序需要设置admin_order_field属性来为方法指定排序依据。...右侧过滤器,会将对应字段值列出来,用于快速过滤,通过list_filters属性设置。上方搜索框,用于对指定字段值进行搜索,支持模糊查询,通过search_fields属性进行设置。...5.其他 富文本编辑器 后台管理员如果需要在后台编辑带样式文字,如编辑对商品详细信息描述,就需要使用富文本编辑器。这里以tinymce为例在Django Admin后台中如何使用富文本编辑器。

    2.8K10

    django 1.8 官方文档翻译: 1-2-2 编写你第一个Django应用,第2部分

    poll 是我们在第一个教程创建: 点击这个”What’s up?” poll 进行编辑: 这有些注意事项: 这表单是根据 Poll 模型自动生成。...这样的话你就需要在注册对象 时告诉 Django 对应配置。 让我们来看看如何在编辑表单上给字段重新排序。...如果你在窗口中添加了一 poll 并点击了 “Save” 按钮, Django 会将 poll 保存至数据库并且动态添加为你正在查看 “Add choice” 表单 已选择项。...– 除了 was_published_recently 这一,因为不支持根据方法输出内容排序。...当 Django 呈现 admin/base_site.html 时,根据模板语言生成最终 HTML 页面。

    2.5K40

    37.Django1.11.6文档

    Django更改1.11: 添加了request参数。 认证后端 这一节详细讲述Django自带认证后端。 关于如何使用它们以及如何编写你自己认证后端,参见用户认证指南中其它认证源一节。...ModelAdmin.form 默认情况下, 会根据模型动态创建一个ModelForm。 它被用来创建呈现在添加/更改页面上表单。 ...如果需要根据请求指定动态值,则可以实现get_list_select_related()方法。...如果没有提供,Django管理员将使用模型默认排序。 如果您需要指定动态顺序(例如,根据用户或语言),您可以实施get_ordering()方法。...根据ModelAdmin定义,模型每个多对多字段将由标准HTML < select multiple> t4>,水平或垂直过滤器或raw_id_admin小部件。

    24.3K80

    django 1.8 官方文档翻译: 1-1-1 Django初探

    以下简单介绍了如何Django 编写一个数据库驱动Web应用程序。...本文档目标是给你描述足够技术细节能让你理解Django如何工作,但是它并不表示是一个新手指南或参考目录 – 其实这些我们都有!...在一个创建 Django 应用典型工作流,首先需要创建模型并尽可能快地启动和运行 admin sites, 让您员工(或者客户)能够开始录入数据。然后,才开发展现数据给公众方式。...通常,一个视图会根据参数来检索数据,加载一个模板并且根据该模板来呈现检索出来数据。...本例,Python datetime 对象被过滤成指定格式(在 PHP 日期函数可以见到这种变换)。 你可以无限制地串联使用多个过滤器。你可以编写自定义过滤器

    76220
    领券