【问题标题】:Django custom manager - how to use custom manager before QuerySetDjango 自定义管理器 - 如何在 QuerySet 之前使用自定义管理器
【发布时间】:2023-03-15 05:22:01
【问题描述】:

我正在构建自己的自定义管理器来获取模型的翻译。想法是:

主要型号:

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 }}

我在上面的代码中描述了这个问题,有什么想法吗?非常感谢任何帮助!

【问题讨论】:

    标签: django django-custom-manager


    【解决方案1】:

    先尝试使用Article.translations 管理器,然后过滤生成的查询集。如果我正确理解你的模型,你想要这样的东西:

    @property
    def articles(self):
        return Article.translations.language('en').filter(article__blog=self)
    

    【讨论】:

    • 这看起来不错,让我试一试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2015-01-27
    • 2020-04-01
    相关资源
    最近更新 更多