按 Django 中内容对象的值排序

Sco*_*oda 3 django django-models

我正在寻找一种优雅的方式来按特定内容对象的字段对查询集进行排序。

class MyModel(models.Model):
    ...
    content_type    = models.ForeignKey(ContentType)
    object_pk       = models.TextField('object ID')
    content_object  = generic.GenericForeignKey('content_type', 'object_pk')
Run Code Online (Sandbox Code Playgroud)

我的内容对象多种多样,但都有一个“计数器”字段

class OtherObject(models.Model):
    ...
    counter = models.PositiveIntegerField(default=0)
    ...
Run Code Online (Sandbox Code Playgroud)

如果我可以查询所有 MyModel 对象,并按相关对象的计数器值对其进行排序,那就太好了。

谢谢 !

Ala*_*air 5

在查询集中不会有一种优雅的方式来做到这一点。要在 SQL 中进行排序,您必须将MyModel表连接到content_type引用的每个其他表。

您可以在 python 中排序,但请注意,这需要对每个对象进行一次查找。

queryset = list(MyModel.objects.all())
sorted_queryset = sorted(queryset, key=lambda x: x.content_object.counter)
Run Code Online (Sandbox Code Playgroud)

如果对计数器字段进行高效排序对您来说真的很重要,您可能需要考虑将计数器字段(或复制它)移动到MyModel.