Пользовательский менеджер Django - как использовать пользовательский менеджер перед QuerySet

Я строю свой собственный менеджер, чтобы получить перевод модели. Идея заключается в следующем:

Основная модель:

class BlogTranslationManager(models.Manager):        
    def language(self):
        lang = translation.get_language()
        return BlogTranslation.objects.filter(lang=lang)

class ArticleTranslationManager(models.Manager):
    def language(self):
        lang = translation.get_language()
        return ArticleTranslation.objects.filter(lang=lang)

class Blog(models.Model):
    created = models.DateTimeField()
    objects = models.Manager()
    translations = BlogTranslationManager()

    # PROBLEM HERE
    @property
    def articles(self):
        # here I need translations of all articles of this blog
        # I cannot do: 
        return self.blog_articles.translations.language('en')
        # because 'translations' Manager cannot be called on QuerySet
        # what can I do here? am I missing something in CustomManagers? 


class Article(models.Model):
    blog = models.ForeignKey(Blog, related_name="blog_articles")
    objects = models.Manager()
    translations = ArticleTranslationManager()

class BlogTranslation(models.Model):
    book = models.ForeignKey(Book, related_name="book_translations")
    field_name = models.CharField(max_length=10)
    lang = models.CharField(max_length=3)
    translation = models.TextField()

class ArticleTranslation(models.Model):
    article = models.ForeignKey(Article, related_name="article_translations")
    field_name = models.CharField(max_length=10)
    lang = models.CharField(max_length=3)
    translation = models.TextField()

и в шаблоне я хочу иметь возможность звонить:

{{ blog.articles }}

Я описал проблему прямо внутри кода выше, есть идеи по этому поводу? Любая помощь высоко ценится!

1 ответ

Решение

Попробуйте использовать Article.translations сначала менеджер, затем отфильтруйте полученный набор запросов. Если я правильно понимаю ваши модели, вы хотите что-то вроде:

@property
def articles(self):
    return Article.translations.language('en').filter(article__blog=self)
Другие вопросы по тегам