Django:查询时显示选择“详细”名称(并且选择在相关模型中)

Posted

技术标签:

【中文标题】Django:查询时显示选择“详细”名称(并且选择在相关模型中)【英文标题】:Django: Show Choices "verbose" name when querying (and the choice is in a related model) 【发布时间】:2018-10-06 08:45:00 【问题描述】:

我正在尝试编写一个视图,该视图显示一个表格,其中包含每个状态的项目数。

我的模型的简化视图如下:

from django.db import models

class Entity(models.Model):
    name = models.CharField(max_length=20)

class Status(models.Model):
    BAD = 0
    NICE = 1
    GREAT = 2
    STATUS_CHOICES = (
        (BAD, 'Bad'),
        (NICE, 'Nice'),
        (GREAT, 'Great')
    )
    entity = models.OneToOneField(Entity, on_delete=models.CASCADE, 
                                  related_name='status')
    status = models.IntegerField(choices=STATUS_CHOICES, db_index=True)

所以,在我的views.py 文件中,我有这样的视图:

from django.shortcuts import render
from django.db.models import Count

def my_summary(request):
    q = Entity.objects.values('status__status').annotate(n=Count('pk'))
    context = 'table_data':q
    return render(request, 'my_app/summary_template.html', context)

我面临的问题是,当我渲染模板时,我只得到状态的编号,我需要显示该状态的标签。所以,而不是显示

 status | entities
 -------+---------
   0    | 3
   1    | 5
   2    | 9

我想展示:

 status  | entities
 --------+---------
   BAD   | 3
   NICE  | 5
   GREAT | 9

有办法吗?谁能指出我正确的方向?

【问题讨论】:

get_status_display() 在views/models/admin....(python 代码)。 get_status_display 在模板中 【参考方案1】:

Django 为选择标签自动生成 getter,在你的情况下它将是 get_status_display。见https://docs.djangoproject.com/en/2.0/ref/models/instances/#django.db.models.Model.get_FOO_display

【讨论】:

以上是关于Django:查询时显示选择“详细”名称(并且选择在相关模型中)的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs - 检查单选按钮时显示/隐藏表格行

如何在按钮单击时显示日期选择器?

sap创建query报表查询时,选择字段按照顺序选择完毕,但测试时显示字段顺序颠倒

选择选项在触摸选择框时显示两次

在点击文本字段时显示日期选择器

ios 7 tableView didSelectRowAtIndexPath 在第一次选择时显示空白数据