<p><code>values()</code>方法返回表示字段名和相应值的键值对字典。在</p>
<p>例如:</p>
<p>型号:</p>
<pre><code>class MyModel(models.Model):
name = models.CharField()
surname = models.CharField()
age = models.IntegerField()
...
</code></pre>
<p>查询:</p>
^{pr2}$
<p>结果:</p>
<pre><code>< Queryset [{'name': 'moutafis', 'surname': 'john'}] >
</code></pre>
<p>现在,您可以像处理普通字典一样操作此结果:</p>
<pre><code>if main_model_name is 'PalletMovement':
# Make life easier
choices = dict(PalletMovement.WAREHOUSE_CHOICES)
for item in result:
item.update({
pallet_movement__location: verbal_choice.get(
pallet_movement__location, pallet_movement__location)
})
</code></pre>
<p>您甚至可以将其转换为一个函数,以获得更好的可重用性:</p>
<pre><code>def verbalize_choices(choices_dict, queryset, search_key):
result = queryset
for item in result:
item.update({ search_key: choices_dict.get(search_key, search_key) })
return result
verbal_result = verbalize_choices(
dict(PalletMovement.WAREHOUSE_CHOICES),
result,
'pallet_movement__location'
)
</code></pre>
<p>我建议使用<code>update()</code>和<code>get()</code>方法,因为它们可以避免潜在的错误,例如:</p>
<ul>
<li><code>search_key</code>不存在于<code>choice_dict</code>中,则<code>get()</code>将返回{<cd4>}的值</li>
<li><code>update()</code>将尝试更新给定的键值对(如果存在),否则将把它添加到字典中。在</li>
</ul>
<hr/>
<p>如果以上内容将在数据的模板表示中使用,则可以创建一个<a href="https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/#writing-custom-template-filters" rel="nofollow noreferrer">custom template filter</a>:</p>
<pre><code>@register.filter(name='verbalize_choice')
def choice_to_verbal(choice):
return dict(PalletMovement.WAREHOUSE_CHOICES)[choice]
</code></pre>
<p>在这里多看一眼:<a href="https://stackoverflow.com/questions/8424992/django-how-to-access-the-display-value-of-a-choicefield-in-template-given-the-a">Django: How to access the display value of a ChoiceField in template given the actual value and the choices?</a></p>