我的願望是有一個共同的選址模型,然後讓誰需要一個位置是指它的各種更高級別的車型。Django管理在線和架構設計
我想提出我的用戶管理與多部分的形式(內嵌),允許他們進入了發佈,建設更高水平的信息,以及每個位置信息。內聯繫統似乎不希望以這種方式工作。
很顯然,我做的事情非常錯誤的,因爲這似乎是一個非常標準的問題也給我。我的模式設計是否受到束縛?
我在愚蠢地使用內聯繫統嗎?我不想爲每個上級對象做位置的子類,因爲我想操縱獨立(郵件列表,或地理的查找也許)
models.py:
...
class Location(models.Model):
"""
A geographical address
"""
# Standard Location stuff
address_line1 = models.CharField("Address line 1", max_length = 45, null=True, blank=True)
...
class Publisher(models.Model):
"""
Contains Publisher information for publishers of yearbooks. Replaces Institution from 1.x
"""
name = models.CharField(max_length=100, null=False, help_text="Name of publisher, e.g. University of Kansas")
groups = models.ManyToManyField(Group, help_text="Select groups that this publisher owns. Usually just one, but multiple groups are possible.")
is_active = models.BooleanField(help_text="Check this box to enable this publisher.")
location = models.OneToOneField(Location)
...
class Building(models.Model):
"""
Contains Building Information
"""
name = models.CharField(max_length=100, null=False, help_text="Name of building, e.g. Physical Sciences")
is_active = models.BooleanField(help_text="Check this box to enable this building.")
location = models.OneToOneField(Location)
...
admin.py:
...
class LocationInline(generic.GenericStackedInline):
model = Location
max_num = 1
extra = 1
class PublisherAdmin(admin.ModelAdmin):
model = Publisher
inlines = [ LocationInline,
]
class BuildingAdmin(admin.ModelAdmin):
model = Building
inlines = [ LocationInline,
]
admin.site.register(Publisher, PublisherAdmin)
admin.site.register(Building, BuildingAdmin)
的任何高層對象擁有這些不同方式的位置
我可以強制在線加載並通過加入這個到選址模型:
# Support reverse lookup for admin
object_id = models.PositiveIntegerField()
content_type = models.ForeignKey(ContentType)
of = generic.GenericForeignKey('content_type', 'object_id')
但我這樣做,即使我得到一個內聯對象,並可以對其進行編輯時,這種關係似乎倒退對我來說,位置存儲一個id到創建它的對象。
任何幫助是值得歡迎的,無論是所推薦模式的改變,使一切工作奇妙(如Django的是那麼好)或技巧,使向後似乎的東西是有意義的。
這就是我想念格雷格。將_itself_附加到另一個對象的概念,而「父」對象沒有任何意識。我的OneToOne字段在這種情況下是多餘的。得到它了。謝謝。 –