我有一个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
实用程序管理器。这两种方式之一是做这件事的最佳方式还是我应该做其他事情?
因为他们*是他们的父类的*成员。如果您查询帖子,那么您将获得帖子。 –