AI智能
改变未来

django的get_xxx_display方法(其中xxx为字段名)

对于配置了choices参数的字段,django提供了get_xxx_display方法
话不多说,代码伺候:
urls.py

from django.conf.urls import urlfrom django.contrib import adminfrom student.views import indexurlpatterns = [url(r\'^admin/\', admin.site.urls),url(r\'^$\', index, name=\'index\')]

views.py

from django.shortcuts import render# Create your views here.from student.models import Studentdef index(request):students = Student.objects.all()return render(request, \'index.html\', context={\'students\': students})

models.py

from django.db import models# Create your models here.class Student(models.Model):SEX_ITEMS = [(1, \'男\'),(2, \'女\'),(0, \'未知\')]STATUS_ITEMS = [(0, \'申请\'),(1, \'通过\'),(2, \'拒绝\')]name = models.CharField(max_length=128, verbose_name=\"姓名\")sex = models.IntegerField(choices=SEX_ITEMS, verbose_name=\"性别\")profession = models.CharField(max_length=128, verbose_name=\"职业\")email = models.EmailField(verbose_name=\"Email\")qq = models.CharField(max_length=128, verbose_name=\"QQ\")phone = models.CharField(max_length=128, verbose_name=\"电话\")status = models.IntegerField(choices=STATUS_ITEMS, default=0, verbose_name=\'审核状态\')created_time = models.DateTimeField(auto_now_add=True, editable=False, verbose_name=\"创建时间\")def __str__(self):return \'<Student: {}>\'.format(self.name)class Meta:verbose_name = verbose_name_plural = \'学员信息\'

index.html

<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><title>Title</title></head><body><ul>{% for student in students %}<li>{{ student.name }} - {{ student.get_status_display }}</li># 在models.py文件中可以看出模型中并未定义get_status_display方法,只定义了status字段{% endfor %}</ul></body></html>

原因:对于设置了choice的字段,Django会自动帮我们提供一个方法(注意是方法), 用来获取这个字段对应的要展示的值。
而admin中,展示带有choice属性的字段时,django会自动帮我们调用get_xxx_display(xxx为字段名,如本文的get_status_display)方法,所以不用配置。而在我们自己写的模板中,这需要自己来写。并且为了简化模板的使用,默认只支持无参数的方法调用,你只需要写方法名称即可,后面的括号不能写,Django会自行帮你调用(如果是方法的话)。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » django的get_xxx_display方法(其中xxx为字段名)