概要
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テーブルは以下のように登録してある前提です。
サンプルコード
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_id
が1
のものを取り出した上で、それらと"どこでもよし"
を合わせたリストを作成し、その中からランダムに一つ取り出すことができました。
上記はリスト内包表記で実装しましたが、以下でも同じことができます。
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パターンのコードでまとめた