0

models.py で定義された次のモデルがあります

class Schoolclass(models.Model):
    ...
    date_created = models.DateTimeField('date created')

私の views.py では、Schoolclass オブジェクトのリストを、date_created に関連付けられた年だけで並べ替えたいと考えています。特に、DateTimeField の他の要素を考慮した順序付けは望ましくありません。その理由は、別のフィールドで二次発注が発生することを望んでいるからです。

これは私が思いつくことができるものですが、うまくいきません。

def index(request):
    class_list = SchoolClass.objects.order_by('date_created__year')

上記のコードを実行すると、次のエラーが表示される場合があります。

Join on field 'date_created' not permitted. Did you misspell 'year' for the lookup type?
4

1 に答える 1

0

問題は、yearフィールドがデータベースではなく Python にのみ存在することです。extra()日時フィールドの年の部分で注文する必要があることをデータベースに明示的に使用する必要があると思います。それを正確に行う方法は、データベースによって異なります。

これは MySQL で機能するはずです。

def index(request):
    class_list = SchoolClass.objects.extra(select={'year_created': 'YEAR(date_created)'}, 
                                           order_by=['year_created'])

他のデータベースを使用している場合はYEAR(date_created)、日時フィールドから年を抽出する同等の操作に置き換える必要があります。

于 2013-11-04T09:55:48.307 に答える