如何獲得字段依賴關係?Django模型 - 字段依賴關係
案例1:如果布爾場call_me
設置,然後telephone
必須設置,否則它應該是空白
案例2:如果多對多場category
(其值銷售,租金)有該值銷售之一,那麼price_sale
必須設置,否則它應該是空白
如何獲得字段依賴關係?Django模型 - 字段依賴關係
案例1:如果布爾場call_me
設置,然後telephone
必須設置,否則它應該是空白
案例2:如果多對多場category
(其值銷售,租金)有該值銷售之一,那麼price_sale
必須設置,否則它應該是空白
對於案例1,你可以很容易地在模型的clean
方法驗證:
from django.core.exceptions import ValidationError
class MyModel(models.Model):
...
def clean(self):
if self.call_me and not self.telephone.strip():
raise ValidationError('Telephone is required')
對於第2種情況,不添加M2M的關係,直到模型保存後,因此,使用clean
你的模式不會在這種情況下工作。但是,您可以使用任何ModelForm
的clean
方法來編輯此操作,無論是在管理員還是您自己的視圖中。
但是,有category
作爲M2M時唯一可能的值是「sale」和「rent」,是差的設計。即使這樣,「銷售」和「租金」是互相排斥的,所以M2M是不合適的(您的模型將不會同時出現「銷售」和「租金」)。
因此,將category
作爲CharField
與choices
組成「銷售」和「租金」將是一個更好的主意。如果你這樣做,那麼你可以使用你的模型的clean
方法,就像情況1一樣。
感謝您的回覆 - 對於案例2,「類別」可以是銷售,出租和/或假期,所以我猜我需要擁有連接表。我如何在M2M領域至少需要一行?情況2的依賴情況如何? (我對Python/Django很新穎) – RS7 2012-03-05 19:03:15
案例1:
不要那樣做,有電話號碼的不同的表,並有從人一ForeignKey
(我假設它是一個人)的電話號碼。如果您每人有多個電話號碼,請反過來,否則請考慮使用OneToOne
。
很顯然你會希望ForeignKey
爲空。這樣,擁有電話號碼的唯一方法就是該人提供了一個電話號碼。
案例2:
這裏我就不明白你的數據庫設計,所以我不能回答。你必須解釋更多 - 爲什麼你需要在這裏ManyToMany
?
聽起來像你有你的模型佈局嚴重。嘗試規範化你的數據庫模式。 – cha0site 2012-03-05 14:38:29
它的哪部分看起來不正確? – RS7 2012-03-05 19:08:55