前提となるモデル
python
1from django.db import models 2from django_mysql.models import JSONField 3 4class Hoge(models.Model): 5 id = models.AutoField(primary_key=True) 6 params = JSONField(blank=True, default=dict)
ここに次のデータが格納されているとします。
id | params |
---|---|
1 | {'piyo':10} |
2 | {'piyo':{'value':20, 'note':'foo'}} |
3 | {'piyo':30} |
このようにキー'piyo'に対する値としては数値のみが入る場合と、辞書型が格納される場合があります。
実現したいこと
このモデルに対して、piyoに対する値が数値でかつ25以上のものを抽出したい。
id=3のみ抽出されることを期待
やったこととその結果
下記命令を実行
python
1Hoge.objects.filter(params__piyo__gte = 25)
結果は期待と異なりid=3だけでなく、id=2のレコードも抽出されてしまいました。
辞書型の値が25以上と判断されたようです。
解決したいこと
「piyoに対する値が数値でかつ25以上」の条件で、id=3のレコードのみ抽出させる方法を知りたいです。
piyoの値として、辞書型のものを除外する方法です。
paramsに格納されているデータのフォーマットを変えるのは不可です。
補足情報(FW/ツールのバージョンなど)
Python 3.6.9
Django 3.1.2
django-mysql 3.11.1
MySQL 5.7.34
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。