【问题标题】:Sorting django-tagging results对 django 标记结果进行排序
【发布时间】:2012-01-05 13:02:43
【问题描述】:

我正在使用

检索一组不同的(不同类/模型的)对象
items = tagging.models.TaggedItem.objects.distinct().filter(tag__name__in=tagslist)

所有这些对象都必须有 pub_date 字段,我想按该字段对它们进行排序。

有什么想法吗?非常感谢。

伊戈尔

【问题讨论】:

    标签: python django tagging django-tagging


    【解决方案1】:

    编辑:我误解了这个问题。您需要使用常规 python 代码对它们进行排序,因为您将无法引用 order_by 的原始对象

    由于 items 是一个 QuerySet,您可以将 order_by() 调用链接到您的 filter() 调用,如下所示:

    items = tagging.models.TaggedItem.objects.distinct().filter(tag__name__in=tagslist).order_by(pub_date)
    

    【讨论】:

    • 这将尝试按 pub_date 对 TAGS 进行排序,而不是按它们标记的对象。自然地,这会回复:Cannot resolve keyword 'pub_date' into field. Choices are: content_type, id, object_id, tag 我需要做的是像for item1, item2 in items: compare item.object.pub_date 这样的事情,但当然要以正确的方式进行,而不会破坏迭代器结构。对伪python感到抱歉
    • pub_date 只能在对象(标签模型上的通用关系)上可用,您不能在查询或按顺序使用(请参阅stackoverflow.com/a/3967871/188955)您可能需要进行排序蟒蛇。
    • 詹姆斯,非常感谢,这听起来很合理。您是否还知道是否有办法将“手动”排序粘贴到迭代器中而不将其转换为数组?我尝试使用sorted 方法,但它令人困惑,实际上似乎并没有影响最终结果。
    • 你尝试了什么? sorted(items, key=lambda x: x.object.pub_date) 应该可以工作
    • 是的。这种方法有效,但只有我重新阅读了手册 ))) 如果有人想了解各种排序选项,请检查以下内容:wiki.python.org/moin/HowTo/SortingThanks JamesO))
    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 2021-08-19
    • 2020-07-12
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    相关资源
    最近更新 更多