2011-07-08 66 views
0

我試圖實現在Django enumartion結構,使得Django的enumaration問題

class Status(): 
PENDING = 0 
CONFIRMED = 1 
DENIED = 2 

STATUS =(
    (PENDING,_("salary_status_pending")), 
    (CONFIRMED,_("salary_status_confirmed")), 
    (DENIED,_("salary_status_denied")), 
) 

,並在我的模型我使用它像

class MyModel(models.Model): 
    status = models.IntegerField(null=False, choices=Status.STATUS) 

它工作正常,如果我想要得到的標籤枚舉字段在我的模板我使用 {{ mymodel.get_status_display }}它寫在我的枚舉字段中的標籤_('key..')而不是在Django文檔中解釋的數字

但是,如果我想在我的view.py中獲得標籤,該怎麼辦? 我想下面寫的代碼,它應該給我我怎樣才能實現這一目標枚舉領域,而不是數量

Status.CONFIRMED 

的標籤嗎?

謝謝

回答

0

我發現下面的代碼後援做什麼,我想

Status.STATUS [Status.CONFIRMED ][1] 
0

這個怎麼樣?

class MyModel(models.Model): 
    PENDING = 0 
    CONFIRMED = 1 
    DENIED = 2 

    STATUS = {PENDING:_("salary_status_pending"), CONFIRMED:..., DENIED:... }  
    STATUS_CHOICES = [(a,a) for a in STATUS.items()]  
    status = models.IntegerField(null=False, choices=STATUS_CHOICES) 

,您可以訪問您的標籤隨處可見使用MyModel.STATUS[MyModel.CONFIRMED]

+0

是definetly一個很好的解決方案謝謝!但我幾乎有20個枚舉字段任何修改它們可能會導致嚴重..有沒有其他的解決方案,而不改變枚舉類? – brsbilgic

+0

您可以即時構建字典:'dict(Status.STATUS)[Status.CONFIRMED]' – dragoon