关键词

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

下面我来详细讲解一下“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框架的使用。

本文链接:http://task.lmcjl.com/news/15712.html

展开阅读全文