【问题标题】:how to return choices value in mongoengine stringfield如何在 mongoengine 字符串字段中返回选择值
【发布时间】:2014-11-03 05:38:52
【问题描述】:

您好,我正在使用带有 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'...]

【问题讨论】:

    标签: python flask mongoengine


    【解决方案1】:

    我建议您将 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]
    

    【讨论】:

      【解决方案2】:

      要获得选择项的详细名称,您需要调用obj.get_<field name>_display()

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

      [i.get_moneda_display() for i in moneda]
      

      【讨论】:

        猜你喜欢
        • 2015-07-01
        • 2020-01-02
        • 1970-01-01
        • 2015-04-28
        • 2019-08-04
        • 2021-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多