【django】自定义列表 models字段显示

本文介绍了如何在Django中自定义Author模型的管理界面,特别是如何在列表视图中显示额外的字段,如邮箱地址,并实现按字段排序和搜索功能。通过创建AuthorAdmin类,设置list_display、search_fields、list_filter等属性,可以定制列表展示、查询栏和排序方式。同时,还探讨了filter_horizontal和raw_id_fields等选项,以优化管理界面的交互体验。

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

自定义列表

参考:http://docs.30c.org/djangobook2/chapter06/

自定义Author模块的列表中的显示字段。 列表默认地显示查询结果中对象的__unicode__()。 我们定义Author对象的__unicode__()方法,用以同时显示作者的姓和名。

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField(blank=True, verbose_name='e-mail')

    **def __unicode__(self):**
        **return u'%s %s' % (self.first_name, self.last_name)**

结果正如图,列表中显示的是每个作者的姓名。


我们可以在这基础上改进,添加其它字段,从而改变列表的显示。 这个页面应该提供便利,比如说:在这个列表中可以看到作者的邮箱地址。如果能按照姓氏或名字来排序,那就更好了。

为了达到这个目的,我们将为Author模块定义一个ModelAdmin类。 这个类是自定义管理工具的关键,其中最基本的一件事情是允许你指定列表中的字段。 打开admin.py并修改:

from django.contrib import admin
from mysite.books.models import Publisher, Author, Book

class AuthorAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'email')   #添加字段显示
    search_fields = ('first_name', 'last_name')   #添加快速查询栏

admin.site.register(Publisher)
# admin.site.register(Author)
admin.site.register(Author,AuthorAdmin)

解释一下代码:

我们新建了一个类AuthorAdmin,它是从django.contrib.admin.ModelAdmin派生出来的子类,保存着一个类的自定义配置,以供管理工具使用。 我们只自定义了一项:list_display, 它是一个字段名称的元组,用于列表显示。 当然,这些字段名称必须是模块中有的。

添加一个快速查询栏。 向AuthorAdmin追加search_fields

我们修改了admin.site.register()调用,在Author后面添加了AuthorAdmin。你可以这样理解: 用AuthorAdmin选项注册Author模块。

admin.site.register()函数接受一个ModelAdmin子类作为第二个参数。 如果你忽略第二个参数,Django将使用默认的选项。PublisherBook的注册就属于这种情况。

弄好了这个东东,再刷新author列表页面,你会看到列表中有三列:姓氏、名字和邮箱地址。 另外,点击每个列的列头可以对那列进行排序。并且在页面顶端看到一个查询栏。



PS: 

list_display = ('first_name', 'last_name', 'email')    #添加字段,以列表显示,not a ManyToManyField

search_fields = ('first_name', 'last_name')   #页面添加查询栏

list_filter = ('publication_date',)  #添加过滤(这里是过滤日期)

date_hierarchy = 'publication_date'   #过滤(日期的另外一种过滤方式,可以添加后看一下)

ordering = ('-publication_date',)   #排序(这里以日期排序,加‘-’表示降序)

fields = ('title', 'authors', 'publisher')  #排除一些不想被其他人编辑的fields(不包含在内的不能编辑,这里publication_date不能编辑了) 

filter_horizontal = ('authors',)    #从‘多选框’的形式改变为‘过滤器’的方式水平排列过滤器,must be a ManyToManyField,且不能用于 ForeignKey字段,默认地,管理工具使用`` 下拉框`` 来展现`` 外键`` 字段

filter_vertical = ('authors',)  #同上,垂直排列过滤器

raw_id_fields = ('publisher',)    #将ForeignKey字段从‘下拉框’改变为‘文本框’显示



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值