Django 重複を取り除くdistinct()

プログラミング
Masa
Masa

こんにちは!Masaです。

今回はDjangoにて取得したクエリセットの重複をなくす方法を解説します。

この記事はこんな方におすすめ!
  • Djangoで取得したデータの重複を取り除きたい
  • distinct()メソッドの使い方が知りたい

重複をなくすとは?

今回はDjangoにてクエリセットで取り出したデータから重複をなくす方法を考えたいと思います。

例えば、以下のような架空のチームのモデルとデータが登録されていたとします。

from django.db import models

class Player(models.Model):
    name = models.CharField(max_length=20)
    team = models.CharField(max_length=20)
    age = models.IntegerField()
    birthplace = models.CharField(max_length=20)

    def __str__(self):
        return self.name

このデータベースから出身地のみを取り出して一覧を作りたいとします。
しかし、出身地が被っている人もいますよね。

出身地を全部取り出すと重複が起きてしまうため、重複を取り除きたいというわけです。

重複を防ぐdistinct()

重複を取り除くには“distinct()”というメソッドを使用します。

“values_list”を使用した方法を見ていきましょう。

※”values_list”の使い方は以下の記事で!

Django "values"と"values_list"の使い方
Masa こんにちは!Masaです。 今回はDjangoのクエリセットから特定の項目に絞って値を取り出す方法について解説します。 Django クエリセットとは まず前提条件として、Djangoにおけるクエリセットは何なのかについて調べてみ...
print(Player.objects.all().values_list("birthplace").order_by("birthplace").distinct())

出力:<QuerySet [('埼玉県',), ('島根県',), ('東京都',), ('神奈川県',), ('福岡県',), ('鹿児島県',)]>

使い方の流れとしては

  1. all()で全データを取得
  2. values_list()で出身地のリストを作成
  3. order_by(“birthplace”)で出身地を順番に整える
  4. distinct()で重複を取り除く

特にorder_by(“birthplace”)で順番を整えることによって、重複をちゃんと取り除いてくれます。
(バラバラにデータが入っている場合、重複を取り除けない可能性あり)

まとめ

今回は重複の取り除き方でした!

重複を取り除くには、”distinct()”メソッドが有効です。

また、“order_by()”でデータを揃えることによって、確実に重複を取り除くことができます。

最後まで読んでいただきありがとうございます。
自己学習に役立てていただけたら嬉しく思います
またSNSやブログでシェアしていただくことや、誤植などをコメントで指摘いただけたら幸いです。

コメント

タイトルとURLをコピーしました