我有以下Django模型,它扩展了django基本博客的Post模型:
from django.basic.blog.models import Post
from l10n.utils import lookup_translation
class ExtendedPost(Post):
class Meta:
proxy = True
def translated_title(self, language_code=None):
return lookup_translation(self, 'title', language_code)
我试图通过覆盖他们的模板并在那里使用新的ExtendedPost行为来使用django基本博客的视图:
{{ post.extendedpost.translated_title }}
但显然这不起作用,因为你不能只访问这样的子类。你是怎么做这种事的?
答案 0 :(得分:1)
嗯,视图仍然会引用原始模型,因此您必须修改视图以传递ExtendedPost
类。
您不仅可以定义代理模型,还可以神奇地覆盖父类。
未经考验的想法基于:Can django's auth_user.username be varchar(75)? How could that be done?
from django.db.models.signals import class_prepared
def add_func(sender, *args, **kwargs):
if sender.__name__ == "Post" and sender.__module__ == "django-basic-blog-module":
sender.translated_title = lambda self, language_code=None: lookup_translations(self, 'title', language_code)
class_prepared.connect(add_func)
覆盖sys.modules
import sys
from django.basic.blog import models
models.Post.translated_title = lambda self, language_code=None: lookup_translations(self, 'title', language_code)
答案 1 :(得分:0)
你可以制作
{{ post.extendedpost.translated_title }}
如果使用多表继承而不是代理模型,则可以正常工作。
但是,引入一个全新的表只是为了添加一个函数并没有多大意义。