【问题标题】:In Django remove duplicates of a QuerySet when using parler在 Django 中使用 parler 时删除 QuerySet 的重复项
【发布时间】:2017-05-22 13:49:17
【问题描述】:

我有一个这样的模型:

from django.db import models
from django.utils.translation import ugettext_lazy as _

from parler.models import TranslatableModel, TranslatedFields

...

class UnitNode(TranslatableModel):
    ...
    translations = TranslatedFields(
        title=models.CharField(_(u'title'), max_length=1024),
        slug=models.SlugField(_('slug'))
        ),
    )

...

我想要一个不重复的 UnitNodes QuerySet,按 slug 排序。当我查询这样的内容时:

qs = UnitNode.objects.distinct().order_by("translations__slug")

我得到了重复。

如何消除重复?

【问题讨论】:

  • 你试过追加.distinct()吗? See the docs.
  • 是的。它没有帮助。 :(
  • "每个事件可能有多个排序数据;每个具有多个子级的事件将多次返回到 order_by() 创建的新 QuerySet。换句话说,使用 order_by() QuerySet 可能会返回比您开始工作时更多的项目——这可能既不是预期的也不是有用的。” - 来自order_by的文档
  • 我有点了解问题但不了解解决方案。

标签: django django-queryset django-parler


【解决方案1】:

解决办法是:

from django.utils.translation import get_language
Country.objects.translated(get_language()).order_by("translations__name")

这样,您只能获取应用中当前使用的语言的实例,并且不会生成重复项。正如您所做的那样,它通过以不同的语言复制自身来获取所有语言的所有实例。

【讨论】:

    猜你喜欢
    • 2021-05-17
    • 2013-05-04
    • 2019-09-22
    • 2020-10-01
    • 2011-07-25
    • 2011-08-18
    • 1970-01-01
    • 2016-10-06
    • 2020-11-04
    相关资源
    最近更新 更多