2016-10-13 27 views
3

假設我有在Django以下許多一對一的關係:如何在Django中強制使用相關字段?

from django.db import models 

class Person(models.Model): 
    # ... 

class Address(models.Model): 
    # ... 
    person = models.ForeignKey(Person, on_delete=models.CASCADE) 

這使得一個人有多個地址。

我想強制讓一個人至少有一個地址,所以不可能在數據庫中保存一個沒有地址的人。

我該如何實現這個目標?是否可以強制使用相關字段(如使用blank=False可以對「正常」字段所做的那樣)?

回答

0

爲什麼不能解決Person上的多對多關係?這似乎是您的數據更自然的表達。

但無論如何,你不能真正執行數據庫的多對多關係。您也許可以重寫Person的保存以檢查地址。但我更願意以表格邏輯處理它。

1

如前所述,無法直接在數據庫上執行關係。

但是,您可以通過在使用clean()方法進行保存之前驗證模型來處理它。它會在保存爲Django模型時自動觸發。

class Person(models.Model): 
    . 
    . 
    . 
    def clean(self): 
     if len(self.addresses) == 0: 
      raise ValidationError('At least one address is required.') 
相關問題