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.pyは関数内にありget_ordering()ます。USINGクエリに句を簡単に追加する方法がわかりません。

ちなみに、Django が正しく順序付けされていない場合は、おそらくバグです。

于 2012-12-31T09:57:52.877 に答える