我不確定定義兩個緊密相關的基於層次結構的對象之間關係的「正確」方法。關係密切的對象的Django模型繼承
我在Django開發了一種類似論壇的框架。
我最初的想法是,由於Thread基本上是一種「特殊」類型的Post,所以我應該創建一個功能齊全的Post模型,然後讓Thread模型繼承它,並用任何字段擴展一個Thread可能需要。像這樣:
class Post(models.Model):
forum = models.ForeignKey(Forum)
title = models.CharField(max_length=50, default="")
text = models.CharField(max_length=2000, default="")
created = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(User)
class Thread(Post):
thread_views = models.IntegerField()
reply_count = models.IntegerField()
(...)
我也想過做一個單一的「郵報」模型與「isThread」布爾字段的事,但感覺不對了。
我在Django docs中看到一個看似非常相關的例子,但它確實表示這些對象存儲在不同的表中,我不確定這是否是這種設計的最佳選擇。
什麼是「正確」的方式來做到這一點,表現明智和良好做法明智?
這取決於你是否要將'Post'對象實際保存到數據庫中。如果你將同時擁有'Posts'和'Threads',那麼你做的是正確的事情。如果不是,並且您認爲將來可能有其他類型的帖子,那麼您可能希望將「Post」作爲[抽象基類](https://docs.djangoproject.com/en/1.11/topics/db/models /#abstract-base-classes)需要被子類化。使用'is_thread'這樣的東西並不是最優的,因爲這意味着特定的'Thread'字段必須是可選的,你需要編寫所有的驗證,而不是依靠模型驗證。 – dirkgroten