2011-06-27 38 views
1

好model.clean,所以我有這樣一個模型:Django的 - 管理/添加運行,即使字段缺失

class Airplane(models.Model): 
    tail = models.ForeignKey(Tails) 
    wheel = models.CharField(max_length=500,blank=True) 
    window = models.CharField(max_length=500,blank=True) 

    def clean(self): 
     if self.tail and self.wheel and self.window: 
      raise ValidationError("Can't have all three, choose tail and one more") 

現在,如果我去使用Django管理員添加新飛機的記錄。如果我將這兩個字段留空並保存,則我得到此Django錯誤指向行if self.tail and self.wheel

DoesNotExist at /admin/MyProject/airplane/add/ 

Request Method:  POST 
Request URL: http://44.101.44.172:8001/admin/MyProject/airplane/add/ 
Django Version:  1.2.5 
Exception Type:  DoesNotExist 
Exception Value:  

Exception Location:  /usr/lib/python2.7/site-packages/django/db/models/fields/related.py in __get__, line 299 
Python Executable: /usr/bin/python 
Python Version:  2.7.0 

Django不應該在運行clean之前檢查是否填寫了必填字段嗎?無論如何,處理這個問題的最好方法是什麼?

回答

0

好,作爲一種解決方法我結束了在admin.py定義與my validation一個custom form這種模式。

我還是不明白,爲什麼之前的Django已經確定所需的字段已經被填入model.clean被調用。哦。

0

您的尾巴字段不接受空值。您需要添加null=True才能使其工作。

+0

嗯,不,整個觀點是我想要尾巴。 – Greg

+0

所以我不明白你的驗證。如果尾部是必需的,而尾部+車輪不是可能的選擇,那麼你怎麼能有一個輪子?它永遠是假的。 – Udi

+0

這是一個玩具例子突出問題行爲,但更清晰我更新的例子,使之更加切合實際。 – Greg

相關問題