我有一個Post
類有幾個子類TextPost
,AudioPost
等,每個都有自己的render_html()
方法我Django應用程序。從父項調用Django子模型方法需要InheritanceManager?
class Post(models.Model):
author = models.ForeinKey(User,...)
title = models.CharField(...)
pub_date = models.DateTimeField(...)
...
def render_html(self):
return "rendered title, author date"
class AudioPost(Post):
audioFile = FileField(...)
def render_html(self):
return "Correct audio html"
...
每個子模型都有用於上傳,驗證和保存規則的ModelForm
。
在主頁視圖中,我想採取所有帖子,按日期排列並呈現它們。對我來說,這應該是越簡單
## in view
context = { 'posts' : Post.objects.order_by('-pub_date')[:5] }
和
## in template
{{ post.render_html() | safe }}
我記住的東西在Java中抽象類以這種方式工作。但是當我用Python這樣做時,render_html
方法被調用,就好像它們是父類的每個成員一樣。我查了一下Django如何實現多表繼承,看來我需要逐個檢查生成的OneToOneFields
,直到找到一個不引發異常的事件,或者使用InheritanceManager
實用程序管理器。這兩種方式之一是做這件事的最佳方式還是我應該做其他事情?
因爲他們*是他們的父類的*成員。如果您查詢帖子,那麼您將獲得帖子。 –