我想寫一些這樣的代碼:檢查非空的字段爲空(Django的)
class SomeModel(models.Model):
field = models.ForeignKey(SomeOtherModel)
def __init__(self, *args, **kwargs):
super(SomeModel, self).__init__(*args, **kwargs)
if self.field is None:
self.field = SomeOtherModel()
...
然而,這引起了self.field.rel.to.DoesNotExist
。 Django的代碼是說的很清楚:
class ReverseSingleRelatedObjectDescriptor(object):
def __get__(self, instance, instance_type=None):
...
if val is None:
# If NULL is an allowed value, return it.
if self.field.null:
return None
raise self.field.rel.to.DoesNotExist
我幾乎可以肯定這個問題之前已經提出,但不知何故,我無法找到任何將匹配特定用例。一個明顯的解決方法當然是使字段可以爲空,但據我所知,實際上會對數據庫模式產生影響,我也喜歡Django提供的完整性檢查。另一個是捕捉異常並進行適當處理。但是這增加了很多樣板代碼。特別是當有像這樣的多個字段時(每個字段都有一個單獨的try...except
塊 - 現在很醜)。你會建議什麼?
編輯:另一件事 - 我可以使用initial
但是,當涉及到外鍵時,這是相當有限。我並不總是知道創作時我想要的那種默認。然而,我會在初始化階段知道它。此外,它可能依賴於其他領域的價值。
我認爲它應該是'hasattr(self,'field')',但是這是有效的。謝謝。 – julkiewicz 2011-04-20 12:49:32
hasattr預計2個參數,得到3 – 2014-10-20 17:29:24