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,并根据字段取值选择不同的模板进行渲染,我们可以根据具体需求展示不同的界面或功能。这种灵活的展示方式,为我们提供了更多的定制化选项,使得后台管理界面更加便捷和易用。