社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Django 做个小后台,细节在完善一点点,滚雪球学 Python 第三阶段

梦想橡皮擦 • 4 年前 • 888 次点击  

橡皮擦,一个逗趣的互联网高级网虫。新的系列,让我们一起进入 Django 世界。

三、Django 后台完善

3.1 列表页展示内容修改

上一篇博客 实现了列表数据展示,但是只显示了一列,并且列标题为英文,本篇博客首先解决该问题。
Django 做个小后台,细节在完善一点点,滚雪球学 Python 第三阶段
修改 blog 文件夹内部的 admin.py 文件,代码如下:

from django.contrib import admin
from blog.models import Blog

# Register your models here.
@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
    # list_display  用于设置列表页展示哪些字段
    list_display = ["title","content","creatr_time"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

list_display 属性值对应的列表项,都是 models.py 代码中的内容,要对应好,否则会出现下述类似错误:

NameError: name 'creatr_time' is not defined
  • 1
  • 1

执行保存代码,Django 会自动进行加载,刷新浏览器即可看到效果。

Django 做个小后台,细节在完善一点点,滚雪球学 Python 第三阶段
代码保存即重新加载输入数据如下:

D:\blog\admin.py changed, reloading.
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
March 25, 2021 - 12:04:53
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.2 列表自定义列实现

除了 models.py 中定义的属性,可以在 list_display 进行调用,还可以自行创建列供其使用。
先修改 models.py 中的内容:

from django.db import models

# Create your models here.
class Blog(models.Model):
    title = models.CharField("标题", max_length=100)
    content = models.TextField("内容")
    creatr_time = models.DateField("发布时间")

    def __str__(self):
        return self.title

    def introduction(self):
        return self.content[0:18]+"..."

    introduction.short_description = "内容简介"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

同步修改 admin.py 中的内容,在 list_display 中新增 introduction

@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
    # list_display  用于设置列表页展示哪些字段
    list_display = ["title","introduction","content","creatr_time"]
    search_fields = ["title"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

运行代码,效果图如下:
Django 做个小后台,细节在完善一点点,滚雪球学 Python 第三阶段

3.3 列表搜索实现

实现列表检索,需要增加的代码也非常简单,在 admin.py 中的类 BlogAdmin 中增加如下代码:

@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
    # list_display  用于设置列表页展示哪些字段
    list_display = ["title","content","creatr_time"]
    # 增加搜索字段
    search_fields = ["title"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Django 做个小后台,细节在完善一点点,滚雪球学 Python 第三阶段

3.4 只读字段

在 Django 中,可以设置某些字段不被修改,只读。例如,我们将发布时间设置为只读字段。
修改 admin.py 文件中的代码:

@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
    # list_display  用于设置列表页展示哪些字段
    list_display = ["title","introduction","content","creatr_time"]
    search_fields = ["title"]
    readonly_fields = ["title"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Django 做个小后台,细节在完善一点点,滚雪球学 Python 第三阶段

3.5 ModelAdmin 常用的属性和方法

本篇博客主要介绍的是 BlogAdmin(admin.ModelAdmin) 这个类,该类继承自 ModelAdmin

常见的属性如下

  • list_display :列表显示字段筛选;
  • search_fields :搜索字段筛选;
  • readonly_fields :设置只读字段;
  • ordering :排序字段;
  • fields :表单页显示字段;
  • exclude :表单页不显示字段;
  • list_filter :边栏筛选;
  • list_editable :列表页可编辑字段设置;
  • list_per_page :列表页显示条数;
  • empty_value_display :空数据替换文字。

常见的方法如下

  • save_model() :保存;
  • delete_model() :删除;
  • get_search_results() :自定义检索;
  • get_list_display() :对 list_display 属性的扩展;
  • get_readonly_fields() :对 readonly_fields 属性的扩展;
  • get_search_fields() :对 search_fields 属性的扩展;

上述属性和方法都会在后续的博客中进行学习,除了以上内容外,Django 还有更多的 QuerySet 技巧,这些都留给后面的文章吧。

相关阅读

  1. Python 爬虫 100 例教程,超棒的爬虫教程,立即订阅吧
  2. Python 游戏世界(更新中,目标文章数 50+,现在订阅,都是老粉)
  3. Python 爬虫小课,精彩 9 讲

今天是持续写作的第 119 / 200 天。
如果你想跟博主建立亲密关系,可以关注同名公众号 梦想橡皮擦 ,近距离接触一个逗趣的互联网高级网虫。
博主 ID:梦想橡皮擦,希望大家 点赞 评论 收藏

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/110437
 
888 次点击