我以前曾問過關於Django Admin,Inline,Generics等這個項目的問題,再次感謝爲這些人提供答案的人。有關背景,這些問題在這裏:Django模型設計
Django - Designing Model Relationships - Admin interface and Inline
Django Generic Relations with Django Admin
不過,我想我也許應該重新檢討我的模型,以確保它實際上是「正確的」。所以這裏的重點是數據庫設計,我猜。
我們有一個包含多個對象的Django應用程序 - 用戶(擁有用戶配置文件),醫院,部門,機構(即教育機構) - 所有人都有多個地址(或無地址)。很可能很多這些地址都有多個地址。
多個對象可能具有相同的地址也是可能的,但這種情況很少見,而且我很樂意爲它們出現的那些情況進行重複。
目前,該機型是:
class Address(models.Model):
street_address = models.CharField(max_length=50)
suburb = models.CharField(max_length=20)
state = models.CharField(max_length=3, choices=AUSTRALIAN_STATES_CHOICES)
...
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
...
class Hospital(models.Model):
name = models.CharField(max_length=20)
address = generic.GenericRelation(Address)
...
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
address = generic.GenericRelation(Address)
...
首先 - 我在做是正確的,與FK領域有地址的每個對象(ES)上?
其次,有沒有更好的選擇使用通用關係這種情況下,不同的對象都有地址?在另一篇文章中,有人提到使用抽象類 - 我想到了這一點,但似乎有相當多的重複,因爲地址模型基本上都是相同的。我們將大量使用Django管理員,所以它必須使用它,最好也使用地址作爲內聯(這是我遇到問題的地方 - 因爲我使用的是通用關係,Django管理員期待content_type和object_id字段中的內容,並且當這些內容爲空時會出錯,而不是進行某種查找)。
乾杯, 維克多