【问题标题】:Is there a way to use get_F00_display in parallel with values() in Django views.py有没有办法在 Django views.py 中与 values() 并行使用 get_F00_display
【发布时间】:2023-02-03 21:46:44
【问题描述】:

我想做的事 :

通过 get_F00_display 或 views.py 中的其他选项显示字符字段的人类可读值,然后在模板中显示。

模型.py

class Leave(CommonFields):

LEAVES_TYPES = [
        ('10', _('Type 1')),
        ('20', _('Type 2')),
        ('30', _('Type 3')),
        ]


owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
type = models.CharField(max_length=3, choices=LEAVES_TYPES, null=True, default="10")


def __str__(self):
    return self.owner.first_name + " " + self.owner.last_name + " : du " + self.begin_date.strftime("%d-%m-%Y") + " au " + self.end_date.strftime("%d-%m-%Y")

视图.py

def get_queryset(self):
    return Leave.objects.filter(is_active=True).values('type', 'begin_date','end_date','range','comment','status')

离开列表.html

<td>{{leave.type}}</td>

但 : 我想回复{{leave.get_type_display}},同时回复Leave.objects.filter(is_active=True).**values**(...) 如何 ?有没有更好的方法来实现这一目标?

【问题讨论】:

  • 使用.values...

标签: django django-views django-templates


【解决方案1】:

使用值。不这样做的主要原因正是您在问题中描述的原因:primitive obsession [refactoring.guru]。如果要限制要获取的列数,可以使用.only(…) [Django-doc].defer(…) [Django-doc] 指定要获取的列不是获取:

def get_queryset(self):
    return Leave.objects.filter(is_active=True).only(
        'type', 'begin_date', 'end_date', 'range', 'comment', 'status'
    )

笔记: 通常使用settings.AUTH_USER_MODEL [Django-doc] 来引用用户模型比直接使用User model [Django-doc] 更好。更多信息可以查看referencing the User model section of the documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 2020-07-17
    • 1970-01-01
    • 2022-11-10
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多