Django:如何将不同的单词映射到特定的字段条目(应该是一个简单的答案)

时间:2014-10-25 10:30:47

标签: python django django-models

我有一个模型的性别属性,该属性在我的数据库中填充,其值为“male”或“female”。此模型属性使用我在views.py文件中创建的函数自动填充,以使用facebook API抓取所选人员的性别。因此,存储在性别字段中的值将是“男性”或“女性”,因为Facebook要求每个用户选择二元性别。但是,如果字段填充了男性或“大象”,如果字段填充了女性,我希望我的所有{{Model.gender}}形式的模板标签返回“hippopotamus”。我想我可以通过在模型设置中使用选项字段选项来做到这一点,但没有运气。那么基本上,将“hippopotamus”映射到“male”和“elephant”到“female”的最简单方法是什么? 提前致谢。

 class Model(models.Model):
      gender = models.CharField(max_length=6, choices=(('male', 'hippopotamus'), ('female', 'elephant')), blank=True, null=True)
编辑:我应该澄清一下,我知道如何在模板中使用条件语句来做到这一点,但是想知道是否有任何django方法在后端本身进行映射。我知道这个问题的解决方案可以简单地说是:

 {% if Model.gender == "male" %}
 Hippopotamus
 {% else %}
 Elephant
 {% endif %}

2 个答案:

答案 0 :(得分:1)

来自docs

  

对于已设置选项的每个字段,对象将具有   get_FOO_display()方法,其中FOO是字段的名称。这个   method返回字段的“人类可读”值。

在模板中你应该这样使用:

{{ model_instance.get_gender_display }}

答案 1 :(得分:1)

嗯,在后端有一个非常简单的方法。 在您加载所需视图的函数中,您可以使用python的条件运算符的想法进行此过滤。

value = b if a > 10 else c

我相信你有这样的东西来加载你在views.py中的视图:

def index(request):
    #You are filtering the model here maybe
    render(request, 'index.html', {'Model' : model});

由于您过滤的模型已经是一个对象,您可以通过dictionary参数(渲染函数的第三个参数)发送已经设置到视图的所有变量。 所以你可以有类似的东西:

def index(request):
    model = #Filter to get the model you want
    gender = "Hippopotamus" if model.gender == "male" else "Elephant"
    render(request, 'index.html' {'gender': gender,})

如果您不知道如何使用渲染功能及其字典,请阅读here