2014-11-03 57 views
1

嗨,我是使用燒瓶mongoengine這裏是我的模型如何mongoengine stringfield返回選擇值

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'...] 

回答

7

我建議你用像這樣一本字典取代你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) 

並添加一個屬性以返回cu rrency的全名:

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

要獲得選擇項目的詳細名稱,你需要調用obj.get_<field name>_display()

所以讓你的列表,你需要做這樣的事情:

[i.get_moneda_display() for i in moneda]