将USING<〜附加到ORDER BY

时间:2012-12-30 23:31:53

标签: python django

我正在尝试使用PostgreSQL作为后端数据库按字母顺序排序非英语作者列表。

这些是我的模特:

class Alphabet(models.Model):
    letter       = models.CharField(max_length=2)
    letter_spell = models.CharField(max_length=3)
    order        = models.SmallIntegerField()

    def __unicode__(self):
        return self.letter

    class Meta:
        ordering = ['order']

class Author(models.Model):
    slug              = models.CharField(max_length=75)
    name              = models.CharField(max_length=50)
    biography         = models.TextField(blank=True)
    ...
    alphabet          = models.ForeignKey(Alphabet)

    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ['name']

不幸的是,这并没有正确排序。

所以我去了终端,打字:

SELECT * FROM authors ORDER BY name

没有给出理想的结果。但是,这是有效的:

SELECT * FROM authors ORDER BY name USING ~<~

那么如何将它附加到我的ORDER BY子句?

请注意我的观看代码如下:

a = Alphabet.objects.all().prefetch_related('author_set')

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以编写自定义Manageroverride默认值。默认排序的原始代码位于https://github.com/django/django/blob/master/django/db/models/sql/compiler.py函数的get_ordering()中。我没有看到任何方法在查询中轻松添加USING子句。

顺便说一句,如果Django没有正确排序,可能是一个错误。