django admin 根据choice字段选择的不同来显示不同的

1. 简介

djagno admin是Django框架提供的一种易于使用的管理界面,可以方便地对后台数据进行增删改查等操作。在使用django admin时,有时候根据某个字段的不同取值,可能需要展现不同的界面或者功能。本文将详细介绍如何根据choice字段的不同取值,来显示不同的内容。

2. 创建模型

首先需要创建一个包含choice字段的模型,用于模拟实际需求。假设我们要创建一个学生模型(Student),其中有一个字段grade,grade的取值可以为1、2或3,分别表示一年级、二年级和三年级。

class Student(models.Model):

GRADE_CHOICES = (

(1, '一年级'),

(2, '二年级'),

(3, '三年级'),

)

name = models.CharField(max_length=100)

grade = models.IntegerField(choices=GRADE_CHOICES)

上述代码中,我们通过IntegerField结合choices参数,创建了一个choice字段grade。在数据库中,grade字段存储的是1、2、3之一的整数值,而在界面上的显示则是对应的中文字符串。

3. 自定义Admin

接下来,我们需要自定义Student模型的Admin界面,并根据grade字段的不同取值显示不同的内容。首先,我们需要创建一个继承自admin.ModelAdmin的类,并定义相应的方法。

from django.contrib import admin

class StudentAdmin(admin.ModelAdmin):

# 列表展示的字段

list_display = ('name', 'grade')

# 根据grade字段的取值显示不同的内容

def change_view(self, request, object_id, form_url='', extra_context=None):

student = Student.objects.get(pk=object_id) # 获取当前对象

template = 'admin/student/change_form.html' # 默认模板

if student.grade == 1:

template = 'admin/student/change_form_grade1.html' # 一年级对应的模板

elif student.grade == 2:

template = 'admin/student/change_form_grade2.html' # 二年级对应的模板

elif student.grade == 3:

template = 'admin/student/change_form_grade3.html' # 三年级对应的模板

return super().change_view(request, object_id, form_url=form_url, extra_context={'template': template})

在上述代码中,我们重写了change_view方法。该方法在打开编辑页面时被调用,通过判断grade字段的取值,选择不同的模板进行渲染。假设我们分别创建了change_form_grade1.html、change_form_grade2.html和change_form_grade3.html三个模板,分别用于展示一年级、二年级和三年级学生相关的内容。

4. 注册Admin

完成自定义Admin的编写后,我们还需要将其注册到Django admin中。

admin.site.register(Student, StudentAdmin)

这样,我们就成功将自定义的StudentAdmin关联到Student模型上了。现在,当我们在Django admin中打开一个Student对象进行编辑时,会根据grade字段的不同取值显示不同的内容。

5. 结语

本文介绍了如何根据choice字段的不同取值,在django admin中显示不同的内容。通过自定义Admin,并根据字段取值选择不同的模板进行渲染,我们可以根据具体需求展示不同的界面或功能。这种灵活的展示方式,为我们提供了更多的定制化选项,使得后台管理界面更加便捷和易用。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签