2011-01-25 7 views
2

モデルをカウントし、次のようになります。ジャンゴ:デフォルトの順序は、多対多の関連フィールドの値に基づいており、

class Weekday(models.Model): 
    ''' 
    >>> for w in Weekday.objects.all(): 
    ... print w 
    ... 
    Sunday 
    Monday 
    Tuesday 
    Wednesday 
    Thursday 
    Friday 
    Saturday 
    ''' 
    name = models.CharField(max_length=9) 

    def __unicode__(self): 
     return self.name 

class Stop(models.Model): 
    class Meta: 
     ordering = ???? 

    name = models.CharField('Stop name', max_length=32) 
    days_open = models.ManyToManyField(Weekday) 

私が欲しい注文の種類がある:あり

  1. すべてなど、すべての7日
  2. 日曜日
  3. 月曜日
  4. などがある
  5. すべてを持っているすべてのもの、(タイブレーカーがCであることと平日のお休みとその後の名前を停止)

誰もがこれにアプローチする方法についての任意の提案がありますか?何とかマネージャーでこれを行うべきでしょうか?あるいはこれを行う簡単な方法がありますか?

ありがとうございます!

答えて

2

モデルフィールドはMeta.orderingにしか指定できません。記述したロジックを実装する場合は、custom managerにする必要があります。

EDIT:

あなたは、あなたのStopモデルにweightフィールドのいくつかの種類を追加しdays_openを更新するとともに、そのフィールドを更新し、次にあなたが発注= [「-weight」]

を使用することができるだろう可能性

また、このようなものは、あなたの目的に合うかもしれません:

Stop.objects.annotate(weight=models.Sum('weekday__weight')).order_by('-weight') 

- もちろんこれはを追加することが必要となりますフィールドからWeekdayモデルに変更し、すべてのレコードにあらかじめ入力してください。これは上記のカスタムマネージャーのメソッドとして実装することもできます。

+0

私に道を導いた! Zielinski氏に感謝します。 –

関連する問題