2016-08-14 88 views
0

早上好,先抱歉我的英文,因爲我在使用谷歌翻譯。價值對象Django

我現在開始使用Python和Django,並且在創建模型時出現了一個問題。我想創建這樣的:

人(models.Model)

  • 名稱
  • ...
  • 地址

地址(models.Model)

  • PublicPlace
  • 鄰居
  • ...

也就是說,爲了使用多個模型的地址作爲一個單獨的ValueObject。地址類中的數據庫字段將保留在People表和可能出現的其他實體(Enterprise,Client,「任何可能有地址的人」)中。因此,請避免重複您需要的每個模型的所有地址字段。

我看到這樣做將通過設置抽象的Meta類地址和繼承其他人。但是如果我想要做更多的ValueObjects,爲此必須從幾個類繼承,我想知道是否有更正確的方法。

謝謝。

+0

爲什麼你想堅持Person等字段,而不是地址作爲一個具體的模型和使用關係? –

+0

這是一個1..1的關係,在這個特殊情況下計劃離開同一張桌子。這些類僅用作示例,可能是另一個ValueObject。我通常使用.NET和DDD,並想知道如何在Django中應用這個... –

回答

1

你想要的東西,如:

class Person(models.Model): 
    LastName = models.CharField(max_length=30) 
    FirstName = models.CharField(max_length=30) 
    ... 
    address = models.ManyToManyField(Address) 

在這麼多,一個人可以有多個地址,每個地址可以有多個人。如果您想只允許每個人使用一個地址,請使用

address = models.ForeignKey(Address) 

這仍然允許每個地址有多個人。

+0

我想僅將類函數作爲數據結構來處理,而不是作爲實體來處理。如果它是一個實體,對於這個例子,將是一個1..1的關係。我想知道如何編寫ValueObjects(「DDD」體系結構的概念)。另一個例子是,如果我確定一個Contact類,它總是有「電話」,「移動」和「電子郵件」字段,Pessoa.Contato.Telefone也是如此。沒有必要記錄在另一張桌子上。 –