Доступ к прокси-модели от родителя в шаблоне - PullRequest
0 голосов
/ 27 февраля 2011

У меня есть следующая модель Django, которая расширяет модель Post из базового блога django:

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)

Я пытаюсь использовать базовый вид блога django, просто переопределив их шаблон и используя новое поведение ExtendedPost:

{{ post.extendedpost.translated_title }}

Но, очевидно, это не работает, потому что вы не можете просто получить доступ к подклассу, как этот. Как ты делаешь такие вещи?

Ответы [ 2 ]

1 голос
/ 27 февраля 2011

Что ж, вид все равно будет ссылаться на исходную модель, поэтому вам придется изменить вид, чтобы он передавал класс ExtendedPost.

Вы не можете просто определить модель прокси и заставить ее волшебным образом переопределить родительский класс.

  1. Непроверенная идея, основанная на: Может ли django auth_user.username быть varchar (75)? Как это можно сделать?

    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)
    
0 голосов
/ 27 февраля 2011

Вы можете заставить

{{ post.extendedpost.translated_title }}

работать, если вы используете наследование нескольких таблиц, а не модель прокси.

Однако, введение новой таблицы просто для добавления функции неиметь много смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...