2012-06-20 81 views
0

我的django管理窗體不顯示給定對象數據的正確初始值。我試過修改表單來顯式設置加載時的初始值,但這也沒有效果。我的代碼如下所示:Django管理窗體不顯示所有實例數據

DISCOUNT_OVERRIDE_CHOICES = (
     (None, ""), 
     (Decimal('10'), _('10%')), 
     (Decimal('20'), _('20%')), 
     (Decimal('30'), _('30%')), 
     (Decimal('40'), _('40%')), 
     (Decimal('50'), _('50%')), 
    ) 
    self.fields['discount'].choices = \ 
      DISCOUNT_OVERRIDE_CHOICES 

    if self.instance.discount: 
     self.initial['discount'] = \ 
       self.instance.discount 

上面的代碼是我後來與形式調用相應的管理模型= MyForm的窗體的一部分。會發生什麼情況是管理頁面將正確加載並顯示所有適當的數據,但「折扣」字段的初始值始終爲空字符串「無」選項,並且永遠不會準確表示與對象一起存儲的折扣百分比其數據填充表單。這個字段是它發生的唯一字段,即使我沒有覆蓋可用的選項,問題仍然存在(在這種情況下,總是在頁面加載時選擇10%選項)

有什麼想法?提前致謝。

+0

是''discount'的models.DecimalField'的實例? –

+0

是的。在這種情況下,我可以不設置無選項嗎? – nct25

+0

您不應該設置初始值,因爲Django將始終使用'ModelForm'中的實例的數據預填充表單。你是否可能會重寫表單,特別是表單上的「折扣」字段?它必須始終保持爲「DecimalField」,否則該值不會是「Decimal」類型,因此不符合您的選擇。 –

回答

0

你的這部分代碼是錯誤的

self.initial['discount'] = \ 
       self.instance.discount 

你應該做

self.fields['discount'].initial = \ 
       self.instance.discount 
+0

感謝您的回答。我也嘗試過,結果相同。任何其他想法? – nct25

+0

由於上述不起作用的地方是你的問題。你必須公開更多的代碼。 – rantanplan

+0

另外我希望你粘貼的代碼'生命'在窗體的__init__裏面。否則它沒有意義。 – rantanplan