2017-08-02 201 views
0

我有一個模型,看起來像:在默認窗體中覆蓋django模型默認值?

class DooDad(models.Model): 
    doo_dad_dogue = models.BooleanField(default=True) 

麻煩是,默認情況下需要通過......的東西,是不相關的這個問題被操縱。如果我正在創建創建對象的表單,解決方案將是微不足道的。 雖然我仍然使用django的默認表單來創建這些東西,但我寧願保留它。

我嘗試了很明顯的:

class DooDad(models.Model): 
    doo_dad_dogue = models.BooleanField(default=True) 

    def __init__(self, *args, **kwargs): 
     super(DooDad, self).__init__(*args, **kwargs) 
     self.doo_dad_dogue = False 

...我懷疑將有可怕的副作用,但值得嘗試。表格仍然出現在選中的框中。

編輯:我應該提到這是Django的1.9

如果它是不可能繼續使用默認的模型創建的形式,有什麼不尋常的,我需要做的,作出的ModelForm隻影響CREATE,而不是編輯?

回答

0

我不認爲使用__init__in模型是一種好的做法。然而,如果你想嘗試一下,知道你的代碼不正確,那麼doo_dad_dogue是一個描述符。使用self.fields['doo_dad_dogue'] = False訪問它的正確方法是 。

使用表單是正確的方法。您可以通過使用INIT方法來覆蓋表中提供的默認值:

def __init__(self, *args, **kwargs): 
    super(<YOUR_FORM>, self).__init__(*args, **kwargs) 
    if args is not None and len(args) and args[0] is not None: 
     <MANIPULATE HERE> 

希望有所幫助。