Django admin 给数据表某一列加入排序功能
在使用Django开发项目时,我们经常会用到Django admin来管理数据表。Django admin提供了一个快速、方便的后台管理功能,让开发人员可以直接在浏览器中对数据库进行操作。但是有时候我们会发现Django admin默认是没有排序功能的,即使我们在数据表中设置了某一列是可以排序的,但在Django admin中并不能直接点击列头进行排序。所以本文将详细介绍如何给Django admin中的数据表某一列加入排序功能。
步骤
1. 在数据模型中设置排序字段
首先,我们需要在我们的数据模型中设置一个字段作为排序的字段。假设我们有一个Book模型,我们想要根据书籍的价格进行排序,那么我们就需要在Book模型中添加一个价格字段。
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.title
2. 在admin中注册模型并配置排序功能
接下来,我们需要在admin.py文件中注册Book模型,并配置排序功能。首先导入Book模型和admin模块。
from django.contrib import admin
from .models import Book
然后,我们需要在BookAdmin类中添加list_display和ordering属性。list_display设置我们在Django admin中显示的字段,ordering设置我们默认的排序字段。
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'price')
ordering = ('price',)
3. 运行项目查看效果
最后,我们需要运行我们的Django项目,登录到Django admin后台,进入Book模型的管理页面,就可以看到我们新增的价格字段,并且可以通过点击价格字段进行排序了。
示例
下面是一个完整的示例,包括Book模型的定义、admin.py的配置以及在Django admin中的效果展示。
models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.title
admin.py
from django.contrib import admin
from .models import Book
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'price')
ordering = ('price',)
运行结果
登录到Django admin后台,选择Book模型,可以看到价格字段已经可以被排序了,效果如下图所示:
书名 作者 价格
Book1 Author1 20.00
Book2 Author2 25.00
Book3 Author3 30.00
总结
通过以上步骤,我们成功给Django admin中的数据表某一列加入了排序功能。在实际开发中,我们可以根据自己的需求在数据模型中设置不同的排序字段,并在admin中进行配置,以方便数据的管理和查看。