【发布时间】:2010-12-22 09:26:46
【问题描述】:
如何在 django 中访问扩展平面页面中的字段?
我是这样写的:
class ExtendedFlatPage(FlatPage):
teaser = CharField(max_length=150)
class ExtendedFlatPageForm(FlatpageForm):
teaser = CharField(max_length=150)
class Meta:
model = ExtendedFlatPage
class ExtendedFlatPageAdmin(FlatPageAdmin):
form = ExtendedFlatPageForm
fieldsets = (
(None, {'fields': ('url', 'title', 'teaser', 'content', 'sites',)}),
)
admin.site.unregister(FlatPage)
admin.site.register(ExtendedFlatPage, ExtendedFlatPageAdmin)
在管理员中创建是可以的。但后来在 flatpages/default.html 我尝试了这个:
<html>
<body>
<h1>{{ flatpage.title }}</h1>
<strong>{{ flatpage.teaser }}</strong>
<p>{{ flatpage.content }}</p>
</body>
</html>
而且没有 flatpage.teaser!怎么了?
【问题讨论】:
-
我认为 FlatpageFallbackMiddleware 仍将使用默认的 Flatpage 模型。此外,您的方法将使用 Multi-table inheritance,这意味着您为扩展模型创建了两个表,这会降低您的查询效率。
-
是的,我在其中看到了第二张表和正确的值。问题是如何访问平面模板中的新字段?
-
您可以创建自定义中间件,该中间件将使用扩展模型而不是普通的 FlatPage。看看 FlatpageFallbackMiddleware 代码,很容易修改以适应您自己的需求。
标签: python django django-flatpages