如何在MongoEngine的StringField中返回选择值

4 投票
2 回答
5628 浏览
提问于 2025-05-01 05:56

你好,我在用Flask和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')

我该怎么做才能在查询时获取选择的值呢:

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

返回:

['Dolar Canadiense','Libra Esterlina'...]
暂无标签

2 个回答

4

要获取选择项的详细名称,你需要调用 obj.get_<字段名称>_display() 这个方法。

所以,要获取你的列表,你需要这样做:

[i.get_moneda_display() for i in moneda]
19

我建议你把你的 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]

撰写回答