質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

3932閲覧

[Django]ListViewで取得するデータを、nullが最後の昇順でソートしたい。

pigton

総合スコア47

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/11/06 02:16

編集2018/11/06 04:29

前提・実現したいこと

Python: 3.6.6
Django: 2.1
mysql: 5.7

Djangoを利用したToDOアプリの作成をしております。

ToDO一覧画面を表示する際、締め切り日で昇順にソートしたいのですが、締め切り日がNULLのデータが先頭に来てしまいます。

昇順でソートしつつ、NULLのデータを後ろにソートしたいです。(できればListViewを使用したまま)
ご教示よろしくお願い致します。

該当のソースコード

views.py

Python

1class DisplayView(ListView): 2 """ToDo表示画面の表示""" 3 model = Todos 4 template_name = 'todo/display.html' 5 context_object_name = 'todo_list' 6 ordering = ['deadline']

models.py

Python

1class Categories(models.Model): 2 """Categoriesモデル""" 3 class Meta: 4 db_table = 'categories' 5 6 category = models.CharField(verbose_name='カテゴリー', max_length=10) 7 8 def __str__(self): 9 return self.category 10 11 12class Todos(models.Model): 13 """ToDosモデル""" 14 class Meta: 15 db_table = 'todos' 16 17 todo = models.CharField(verbose_name='ToDo', max_length=100) 18 category = models.ForeignKey(Categories, verbose_name='カテゴリー', on_delete=models.PROTECT) 19 deadline = models.DateField(verbose_name='締め切り', null=True, blank=True) 20 register_datetime = models.DateTimeField(verbose_name='登録日時', auto_now_add=True) 21 update_datetime = models.DateTimeField(verbose_name='更新日時', null=True, auto_now=True) 22

調べたこと

参照:http://d.hatena.ne.jp/katz_24/20111119/1321716167
こちらのURLを見ると、MySQLではNULLを一番後ろにしたソートは可能だそうです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

sorted()で判定すれば対応できるみたいな記事がありました。

>>> l = [1, 3, 2, 5, 4, None, 7] >>> sorted(l, key=lambda x: (x is None, x)) [1, 2, 3, 4, 5, 7, None]

投稿2018/11/06 02:55

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

以下のURLを参照しました。
参照:https://stackoverflow.com/questions/15121093/django-adding-nulls-last-to-query

Python

1from django.db.models import F 2 3class DisplayView(ListView): 4 """ToDo表示画面の表示""" 5 model = Todos 6 template_name = 'todo/display.html' 7 context_object_name = 'todo_list' 8 9 def get_queryset(self): 10 # Fはモデルフィールドの値を参照してクエリセットを生成するクラスである。 11 return super().get_queryset().order_by(F('deadline').asc(nulls_last=True))

投稿2018/11/06 05:23

pigton

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問