gpt4 book ai didi

Django DetailView模板显示所有字段的显示值

转载 作者:行者123 更新时间:2023-12-02 03:03:52 26 4
gpt4 key购买 nike

我制作了一个模板来显示模型中的所有字段和值,它看起来像这样:

## detail_template.html ##
{% for name, value in object.get_fields %}
<p>
<label>{% trans name %}:</label>
<span>{{ value|default:"Not available" }}</span>
</p>
{% endfor %}

在类中您可以看到声明的 get_fields 函数:

## models.py ##
Class Object:
...many fields...

def get_fields(self):
return [(field.verbose_name, field._get_val_from_obj(self)) for field in self.__class__._meta.fields]

问题是,例如,当我有一个带有选择的 CharField 时,例如:

## models.py ##
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
...all other fields ...
sex = models.CharField(verbose_name=u"Sex", max_length=1, choices=GENDER_CHOICES)

它显示M或F,我想要做的是加载所有字段的get_NAMEFIELD_display,而不需要手动执行所有字段:

<p>
<label>{% trans 'Sex' %}:</label>
<span>{{ object.get_sex_display|default:"Not available" }}</span>
</p>

我有一个线索:Django Contrib Admin 在列出对象时会这样做,所以我确信有一个通用的方法可以做到这一点,并且我也感谢任何帮助。

最佳答案

Django >= 2.0

field._get_val_from_obj() 在 Django 2.0 中已被删除,改用 field.value_from_object()

get_fields() 添加到 models.py 中:

class Object(Model):
field1 = CharField(max_length=150)
field2 = CharField(max_length=150)

def get_fields(self):
return [(field.verbose_name, field.value_from_object(self)) for field in self.__class__._meta.fields]

然后在 template.html 上将其称为 object.get_fields:

<table>
{% for label, value in object.get_fields %}
<tr>
<td>{{ label }}</td>
<td>{{ value }}</td>
</tr>
{% endfor %}
</table>

关于Django DetailView模板显示所有字段的显示值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10027298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com