LoginSignup
0
0

【Django】DBから取得したデータ&必ず任意のデータを一つ加えたリストからランダムに取り出す

Posted at

概要

Djangoにて、ORMにより特定の条件に一致するデータをDBテーブルから取得し、任意のデータを必ず一つ加えた上で、その中からランダムに一つの要素を取り出すコードを実装しました。

モデル定義は以下。

class Country(models.Model):
    area_id = models.IntegerField(null=True, blank=True)
    name = models.CharField(max_length=100, null=True, blank=True)
    capital = models.CharField(max_length=100, null=True, blank=True)

    class Meta:
        db_table = 'country'

DBテーブルは以下のように登録してある前提です。

image.png

サンプルコード

import  random
from sample.models import Country


values= Country.objects.filter(area_id=1)
print(values)
# <QuerySet [<Country: Country object (1)>, <Country: Country object (2)>]>

values = [value.name for value in values] + ["どこでもよし"]
print(values)
# ['Japan', 'China', 'どこでもよし']

value = random.choice(values)
print(value)
# Japan

これにより、area_id1のものを取り出した上で、それらと"どこでもよし"を合わせたリストを作成し、その中からランダムに一つ取り出すことができました。

上記はリスト内包表記で実装しましたが、以下でも同じことができます。

values = Country.objects.filter(area_id=1).values_list('name', flat=True)
values = list(values) + ["どこでもよし"]
value = random.choice(values)
print(value)

values_listなどDjangoのORMが返す形式などを以前別記事でまとめたのでそちらも紹介します。
【Django】ORMのvalues/values_list/flat=Trueなどの出力結果を11パターンのコードでまとめた

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0