首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使django-parler字段在管理中可排序的首选方法

使django-parler字段在管理中可排序的首选方法
EN

Stack Overflow用户
提问于 2015-04-28 02:03:12
回答 1查看 1.4K关注 0票数 4

我在几个模型上使用django-parler。通常,您将parler应用于类似title、name等字段,当然,您希望能够在Django管理中对这些字段进行排序。我做的最接近的方法是在ModelAdmin上重写queryset方法,但这似乎是一种非常粗糙的方法。另外,它只设置默认的排序,您不能单击-头-排序字段。

代码语言:javascript
复制
class MyModelAdmin(TranslatableAdmin):
    list_display = ['title', 'language_column']

    def get_queryset(self, request):
        language_code = settings.LANGUAGE_CODE
        qs = Grant.objects.translated(language_code).order_by('translations__title')
        return qs

因此,问题是:您能使已翻译的字段在管理中排序吗?如果您只需要将其显示或硬编码到默认语言中,这并不重要,因为它只供管理员使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-08 10:20:22

这是一个我们也在努力奋斗的领域。您的示例非常适合排序,因为您使用.translated(..)将列表限制为一种语言。

要对事物进行排序,可以遵循标准的ModelAdmin逻辑,其中对列表进行筛选:

代码语言:javascript
复制
class MyAdmin(TranslatableAdmin):
    list_display = ('title_column', ...)

    def title_column(self, object):
        return object.title
    title_column.short_description = _("Title")
    title_column.admin_order_field = "translations__title"

    def get_queryset(self, request):
        # Limit to a single language!
        language_code = self.get_queryset_language(request)
        return super(MyAdmin, self).get_queryset(request).translated(language_code)

注意,这段代码当前隐藏了所有未被翻译的对象!

对于常规的查询集,使用.order_by('translations__title')将无法工作,因为您可以先单击已翻译的行或回退行。这种情况只能通过自定义SQL来实现。例如:

代码语言:javascript
复制
SELECT project.id,
       translation.language_code,
       translation.title,
       fallback.title,
       COALESCE(translation.title, fallback.title) AS order_title
FROM "myapp_project" AS project
LEFT OUTER JOIN "myapp_project_translation" AS translation ON (translation.master_id = project.id AND translation.language_code = 'nl')
LEFT OUTER JOIN "myapp_project_translation" AS fallback ON (fallback.master_id = project.id AND fallback.language_code = 'en')
ORDER BY order_title

有了.extra()admin_order_field的混合,您可能能够让它工作起来,但是使用.translated()肯定会使事情变得更容易。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29909036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档