0

我正在尝试使用 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')

您的帮助将不胜感激。

4

1 回答 1

0

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

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

于 2012-12-31T09:57:52.877 回答