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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1327閲覧

ユーザーのモデルの値の最も大きいもののみを表示させたい

退会済みユーザー

退会済みユーザー

総合スコア0

Django

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/10/18 13:43

ユーザーのモデルの値の最も大きいもののみを表示させたいです。
views.pyに

@login_required def test(request): test_score = User.objects.filter(user=request.user).order_by('test_date') return render(request, 'test.html',{'test_score': test_score})

と書いて
models.pyに

class User(models.Model): user = models.ForeignKey("auth.User", verbose_name="imageforegin") test_date = models.IntegerField(max_length=100,null=True) score = models.IntegerField(max_length=100,null=True)

と、
test.htmlに

<h3>Your score is {% for score in test_score %} <h2 class="one"> {{ score.score }} </h2> {% endfor %} </h3>

と書きました。
テストの受験日が2017年03月03日なら、20170303とtest_dateに登録します。
他にテストの点数をscoreに登録(例えば60点なら60と)します。
ユーザー(user)・テストの受験日(test_date)・テストの点数(score)のデータは、同一ユーザーでも何種類もあります。例えば、
Tom 20170809 60
Tom 20170810 100
Tom 20171010 30
とデータがあるなら、test.htmlに

<h3>Your score is <h2 class="one">30</h2> </h3>

となるように表示させたいです。
views.pyの

test_score = User.objects.filter(user=request.user).order_by('test_date')

でtest_dateの最も新しいものを取って来ていると思ったのですが、今

<h3>Your score is <h2 class="score">60</h2> <h2 class="score">100</h2> <h2 class="score">30</h2> </h3>

のように全てのデータが表示されてしまっています。
なぜ1つだけデータをとって来ているつもりなのに、このように全部のデータをとって来てしまっているのでしょうか?

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

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

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

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

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

guest

回答2

0

test_score = User.objects.filter(user=request.user).order_by('test_date')

test_score = User.objects.filter(user=request.user).order_by('test_date')[0]

と[0]と最後に置けばクエリの最初のインスタンスだけ取り出せますよ〜

下記ページ参考にしてくださいませ(『クエリセットに制約を課す』の部分です)
http://docs.djangoproject.jp/en/latest/topics/db/queries.html

投稿2017/10/20 09:43

k_mawa82

総合スコア234

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

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

0

ベストアンサー

order_byは並べ替えなので、「1つだけデータをとって来ている」というのは勘違いではないでしょうか。

デフォルトでは、 QuerySet の返す結果はモデルの Meta の ordering オプションに指定した整列条件のタプルに従って整列されます。 order_by を 使うと、この挙動を QuerySet 単位でオーバライドできます。

QuerySet API リファレンス — Django 1.4 documentation

QuerySetをスライスすれば望みのものになりそうな気がしますが、その場合テンプレートも書き換える必要がありますね。

投稿2017/10/19 02:12

Lhankor_Mhy

総合スコア36074

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

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

退会済みユーザー

退会済みユーザー

2017/10/19 11:30

ありがとうございます。例えばどのように書けますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問