33

モデルのデフォルトの並べ替え順序を、(整数キーではなく) 関連モデルのフィールドに設定することは可能ですか? つまり、両方のモデルのフィールドを持つ SQL order by 句を生成するものはありますか? もしそうなら、どのように?これは query_by で実行できますが、デフォルトで設定する方法がわかりません。ありがとう。

class Foo(models.Model):
    name = models.CharField(max_length=50)

class Bar(models.Model):
    related = models.ForeignKey(Foo)
    bar_date = models.DateField()

    class Meta:
        ordering = ('bar_date', 'related.name', )
4

6 に答える 6

36

私はdjango 1.2.7を使用しており、ForeignKey.Attributeを接続する代わりに「__」を使用する必要があるため、次のコードが機能します。

class Meta:
    ordering = ('bar_date', 'related__name', )
于 2011-09-21T08:59:05.263 に答える
7

order-with-respect-toを見てください。

于 2009-02-25T23:24:37.190 に答える
3

order_with_respect_to (1 つのフィールドのみをサポートする) の代わりに、カスタム マネージャーを使用して順序付けを行うことができます。これにより、Foo の複数のフィールドで注文したり、通常の Bar.objects マネージャーを使用したりすることもできます。Meta.ordering またはカスタム マネージャーの順序付けが最初に適用されるかどうかをテストする必要があります。

class FooSortedManager(models.Manager):
    def get_query_set(self):
        return super(FooSortedManager, self).get_query_set().order_by('foo__name')

class Foo(models.Model):
    name = models.CharField(max_length=50)

class Bar(models.Model):
    related = models.ForeignKey(Foo)
    bar_date = models.DateField()

    foo_sorted = FooSortedManager()

    class Meta:
        ordering = ('bar_date',)
于 2009-04-17T04:01:20.723 に答える
0

うーん...qs-rfの前に書かれた古いdjangoアプリケーションをアップファクタリングしながら、同様のことを解決しています。ここでは、「ドット」表記がおそらく使用されていました??? ...「何か」を表示するのに数時間かかりましたが、まだわかりませんが、...ドットを「__」(二重下線)に置き換えてみてください。これは役に立ちます。..実際、現在、私はまだHOPE TOO :-)))

@stuart: "order_with_respect_to"の場合、子テーブルに自動的に追加された物理モデルフィールドについて何かを読みました...ここにあるものを完全には理解していません... IMHOのドキュメントは、構文の順序付けについて非常に悪いです。

コメントなし :-) http://code.djangoproject.com/ticket/8975

とにかく、私はDjangoが好きですが、まだ... :-))

于 2009-03-30T18:49:47.060 に答える