Python Django 后台管理之后台模型属性详解

yizhihongxing

下面我来详细讲解一下“Python Django 后台管理之后台模型属性详解”的攻略。

一、介绍

在Django中,模型是创建数据库表的关键,而后台管理是我们在开发实践中需要的一个基础模块。因此,了解后台管理中的各种模型属性对于有效管理数据来说是非常重要的。

二、模型属性

下面介绍一下在Django中后台模型常用的属性。

1. verbose_name和verbose_name_plural

verbose_name属性用来设置模型对象在后台管理列表中显示的名称。verbose_name_plural则是用来设置模型对象的复数形式显示。示例如下:

class Article(models.Model):
    title = models.CharField(max_length=100, verbose_name='文章标题')
    content = models.TextField(verbose_name='文章内容')

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章列表'

2. ordering

用于指定模型对象在后台管理列表中排序的方式。示例如下:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    pub_time = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-pub_time']

3. list_display

用于指定在后台管理列表中显示哪些字段的值。示例如下:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    pub_time = models.DateTimeField(auto_now_add=True)
    is_published = models.BooleanField(default=False)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章列表'
        ordering = ['-pub_time']

    def get_absolute_url(self):
        return reverse('article_detail', args=[str(self.id)])

    def published(self):
        return self.is_published == True

    published.boolean = True  # 将published函数对应的列的显示值由True/False改为勾/叉

    list_display = ('title', 'pub_time', 'published')

4. list_filter

用于指定在后台管理列表页面可以根据哪些字段进行过滤。示例如下:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    pub_time = models.DateTimeField(auto_now_add=True)
    is_published = models.BooleanField(default=False)

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章列表'
        ordering = ['-pub_time']

    list_display = ('title', 'pub_time', 'is_published')
    list_filter = ('is_published', 'pub_time')

5. search_fields

用于指定在后台管理列表页面可以根据哪些字段进行搜索。示例如下:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    pub_time = models.DateTimeField(auto_now_add=True)
    is_published = models.BooleanField(default=False)

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章列表'
        ordering = ['-pub_time']

    list_display = ('title', 'pub_time', 'is_published')
    list_filter = ('is_published', 'pub_time')
    search_fields = ('title', 'content')

6. date_hierarchy

用于指定在后台管理列表页面可以按照哪个字段来展开日期层级。示例如下:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    pub_time = models.DateTimeField(auto_now_add=True)
    is_published = models.BooleanField(default=False)

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章列表'
        ordering = ['-pub_time']

    list_display = ('title', 'pub_time', 'is_published')
    list_filter = ('is_published', 'pub_time')
    search_fields = ('title', 'content')
    date_hierarchy = 'pub_time'

三、示例

下面演示一个具体的例子。

1. 示例一:用户管理

假设我们需要实现用户管理功能,需要定义用户模型User,模型中需要包含username、email、date_joined等字段。我们可以在模型中添加如下属性:

class User(models.Model):
    username = models.CharField(max_length=20, verbose_name='用户名')
    email = models.EmailField(max_length=255, verbose_name='邮箱地址')
    date_joined = models.DateTimeField(auto_now_add=True, verbose_name='注册时间')

    class Meta:
        db_table = 'user'
        verbose_name = '用户'
        verbose_name_plural = '用户列表'
        ordering = ['-date_joined']

    def __str__(self):
        return self.username

在User模型中,我们通过定义verbose_name和verbose_name_plural属性来指定在后台管理页面中显示的名称;通过定义db_table属性来指定表名;通过定义ordering属性来指定在后台管理页面中按照注册时间倒序排列。同时,我们可以定义__str__方法来返回对象的字符串表示形式。

2. 示例二:商品管理

假设我们需要实现商品管理功能,需要定义商品模型Good,模型中需要包含name、description、price、created_time等字段。我们可以在模型中添加如下属性:

class Good(models.Model):
    name = models.CharField(max_length=100, verbose_name='商品名称')
    description = models.TextField(verbose_name='商品描述')
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品价格')
    created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')

    class Meta:
        db_table = 'good'
        verbose_name = '商品'
        verbose_name_plural = '商品列表'
        ordering = ['-created_time']

    def __str__(self):
        return self.name

在Good模型中,我们同样通过定义verbose_name和verbose_name_plural属性来指定在后台管理页面中显示的名称;通过定义db_table属性来指定表名;通过定义ordering属性来指定在后台管理页面中按照创建时间倒序排列。同样的,我们可以通过定义__str__方法来返回对象的字符串表示形式。

四、总结

通过本文的学习,我们可以了解到后台管理中常用的模型属性,可以帮助我们更加高效地管理数据。同时,我们还通过两个具体的示例了解了后台模型的设计和使用,帮助我们更好地理解和掌握Django框架的使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Django 后台管理之后台模型属性详解 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Anaconda+django写出第一个web app(三)

    前面我们已经建立了模型Tutorial,也已经可以用Navicat Premium打开数据看查看数据,接下来我们通过建立admin账户来上传数据。 在命令行执行如下命令来创建用户:  python manage.py createsuperuser  然后输入相应的用户名、邮箱和密码,邮箱可随意填写,接下来执行 python manage.py runser…

    Django 2023年4月11日
    00
  • django模型层(model)进行建表、查询与删除的基础教程

    下面是“django模型层(model)进行建表、查询与删除的基础教程”的攻略: 什么是Django模型层 Django模型层,又称为ORM(Object Relational Mapping,对象关系映射),是Django的核心组件之一。它可以让我们不需要编写SQL语句就能与数据库进行交互。在模型层中,我们可以定义数据表、字段、数据类型、索引等信息,这些信…

    Django 2023年5月16日
    00
  • 使用Python的Django和layim实现即时通讯的方法

    下面我详细讲解如何使用Python的Django和layim实现即时通讯的方法。 1. 前置条件 在开始之前,你需要确保以下条件已经满足: 你已经学习了基本的Python语言知识,并且掌握了Django框架的基本使用方法。 你已经了解了layim的基本使用方法,并且理解了前后端分离的开发模式。 如果你还没有掌握以上内容,建议先进行学习和实践,然后再来阅读本文…

    Django 2023年5月16日
    00
  • 【开源】最近写了一个简单的网址导航网站

    前言 随着团队的成长,要管理的项目或使用的内部系统越来越多,很多内部系统都没有域名,使用IP+端口,很难记。 为了解决这个痛点,我抽空写了个导航网站~ 目前用下来效果还不错,可以基本完美的解决这个问题。 项目名称是 SiteDirectory ,代码在 Github 开源了: https://github.com/Deali-Axy/SiteDirector…

    2023年4月10日
    00
  • Django分页设置

      1.  “”” 分页组件使用示例: obj = Pagination(request.GET.get(‘page’,1),len(USER_LIST),request.path_info) page_user_list = USER_LIST[obj.start:obj.end] page_html = obj.page_html() return re…

    Django 2023年4月16日
    00
  • vue+django配置

    1.写完Vue项目 修改src/router/index.js的Router对象 export default new Router({ mode: ‘history’, routes: [ { path: ‘/’, name: ‘Pos’, component: Pos } ] }) //添加mode:’history’ 2.修改config/index.…

    Django 2023年4月13日
    00
  • django2 + python3 显示静态文件中的图片

    之前一直搞不出来 是因为图片的问题,步骤也就是固定的几步,到位了就差不多成了文件夹结构:. ├── HelloWorld │   ├── __init__.py │   ├── __pycache__ │   │   ├── __init__.cpython-36.pyc │   │   ├── settings.cpython-36.pyc │   │  …

    Django 2023年4月12日
    00
  • Django学习之六:Django 常用模块导入记忆

    Django 常用模块导入记忆 django相关 1. urls相关操作 from django.urls import path, re_path, include from django.urls import reverse // 注意reverse 和另一个reversed区别。前者要明确导入,后者是built-in内置不用导入;两者功能也不一。 2…

    Django 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部