从模板中的父级访问代理模型

时间:2011-02-27 05:28:07

标签: django django-templates

我有以下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 }}

但显然这不起作用,因为你不能只访问这样的子类。你是怎么做这种事的?

2 个答案:

答案 0 :(得分:1)

嗯,视图仍然会引用原始模型,因此您必须修改视图以传递ExtendedPost类。

您不仅可以定义代理模型,还可以神奇地覆盖父类。

  1. 未经考验的想法基于: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)
    
  2. 覆盖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 }}

如果使用多表继承而不是代理模型,则可以正常工作。

但是,引入一个全新的表只是为了添加一个函数并没有多大意义。