如何在mongoengine stringfield中返回选择值

时间:2014-11-03 05:38:52

标签: python flask mongoengine

嗨,我在这里使用带有mongoengine的烧瓶是我的模型

class Change(db.Document):
    code = (('CAD', 'Dolar Canadiense'),
            ('GBP', 'Libra Esterlina'),
            ('MXN', 'Peso Mexicano'),
            ('CHF', 'Franco Suiso'),
            ('EUR', 'Euro'),
            ('DKK', 'Corona Danesa'),
            ('SEK', 'Corona Sueka'),
            ('JPY', 'Yen Japones'),
            ('CUP', 'Peso Cubano'),
            ('PAB', 'Balboa Panama'),
            ('AUD', 'Dolar Australiano'),
            ('USD', 'Dolar Estadounidense'),
            ('NOK', 'Corona Noruega'))

    fecha = db.DateTimeField(required = True, unique_with = 'moneda')
    moneda = db.StringField(max_length=3, choices=code, required = True)
    recanje = db.FloatField(required  = True)
    canje = db.FloatField(required = True)

    @db.queryset_manager
    def objects(doc_cls, queryset):
        return queryset.order_by('date')

当我进行查询时,如何获得de选择的值:

moneda = Exchange.objects.distinct("moneda")

返回:

['Dolar Canadiense','Libra Esterlina'...]

2 个答案:

答案 0 :(得分:9)

我建议您使用如下字典替换code变量:

codes = {'CAD': 'Dolar Canadiense',
         'GBP': 'Libra Esterlina',
         'MXN': 'Peso Mexicano',
         'CHF': 'Franco Suiso',
         'EUR': 'Euro',
         'DKK': 'Corona Danesa',
         'SEK': 'Corona Sueka',
         'JPY': 'Yen Japones',
         'CUP': 'Peso Cubano',
         'PAB': 'Balboa Panama',
         'AUD': 'Dolar Australiano',
         'USD': 'Dolar Estadounidense',
         'NOK': 'Corona Noruega'
         }

然后,您可以将模型更改为仅存储货币代码:

codigo_moneda = db.StringField(max_length=3, choices=codes.keys(), required = True)

并添加一个属性以返回货币的全名:

@property
def nombre_moneda(self):
  return self.codes(self.codigo_moneda)

答案 1 :(得分:4)

要获取详细的选择项名称,您需要致电obj.get_<field name>_display()

因此,要获得列表,您需要执行以下操作:

[i.get_moneda_display() for i in moneda]