2009-02-25 8 views
16

モデルのデフォルトのソート順を、関連するモデル(整数キーではなく)からフィールドに設定することは可能ですか?つまり、フィールドを持つSQL order by節を生成するもの両方のモデルから?もしそうなら、どうですか?私はquery_by経由でこれを行うことができますが、私はデフォルトでそれを設定する方法を見つけることができません。ありがとう。関連テーブルフィールドを使用したDjangoモデルのデフォルトソート順

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',) 

答えて

1

hmm ... qs-rfの前に書かれた古いdjangoアプリケーションをアップファーリングしているときに同様のことを解決していますが、「ドット」表記がおそらく使用されましたか? ...「何か」を消すのに数時間かかりましたが、私はまだ分かりませんが、ドットを "__"(二重のアンダースコア)に置き換えると、これは助けになります。実際には、まだ私はまだ私は何かを完全に理解していません... IMHOのドキュメントは非常に悪いです。構文の順序付けについて、howgh!

http://code.djangoproject.com/ticket/8975

:-)ノーコメントとにかく、私は:-) ... Djangoのが好きな、まだ)

2

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

私はジャンゴ1.2.7を使用して、代わりのForeignKey.Attributeを接続する私たちは、「__」を使用しなければならないので、このコードは動作します
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',) 
19

class Meta: 
    ordering = ('bar_date', 'related__name',) 
+0

+1ニースとシンプル – tatlar

0

ジャンゴの現代版では、それは次のとおりです。

class Meta: 
     ordering = ['word'] 
+0

この回答は、実際の言い回しを使用していないため、最近のバージョンではどのように異なっているのかは不明です。 – mastachimp

0
class Question(models.Model): 

    question_text=models.CharField(max_length=200) 
     class Meta: 
    verbose_name_plural=" Question" 

class Choice(models.Model): 

    question=models.ForeignKey(Question,on_delete=models.CASCADE) 
    class Meta: 
    verbose_name_plural=" Choice" 

あなたはそれが以下のように数字を使用して上または順序として、クラス名の前のスペースの数を変更することができます次のいずれか:

class Question(models.Model): 

    question_text=models.CharField(max_length=200) 
     class Meta: 
    verbose_name_plural="1.Question" 

class Choice(models.Model): 

    question=models.ForeignKey(Question,on_delete=models.CASCADE) 
    class Meta: 
    verbose_name_plural="2.Choice" 
関連する問題