djangoproject.comのこのチケット の場合とほぼ同じようにしたいのですが、いくつかの追加のフォーマットを使用します。このクエリから
>>> MyModel.objects.values('cryptic_value_name')
[{'cryptic_value_name': 1}, {'cryptic_value_name': 2}]
私はそのようなものを取得したい:
>>> MyModel.objects.values(renamed_value='cryptic_value_name')
[{'renamed_value': 1}, {'renamed_value': 2}]
別のより組み込みの方法がありますか、これを手動で行う必要がありますか?
_Django>=1.8
_から、注釈とFオブジェクトを使用できます
_from Django.db.models import F
MyModel.objects.annotate(renamed_value=F('cryptic_value_name')).values('renamed_value')
_
また、extra()
は、 Django docs: から非推奨になります
これは古いAPIであり、将来のある時点で廃止される予定です。他のquerysetメソッドを使用してクエリを表現できない場合にのみ使用してください。使用する必要がある場合は、QuerySet.extraキーワードを使用してユースケースを使用してチケットを提出してください(最初に既存のチケットのリストを確認してください)。この方法のバグの改善や修正は行っていません。
他のマネージャーメソッドを使用せずに(v2.0.8
でテスト済み):
from Django.db.models import F
MyModel.objects.values(renamed_value=F('cryptic_value_name'))
これは私が自分のプロジェクトでそれを機能させる方法です
def json(university):
address = UniversityAddress.objects.filter(university=university)
address = address.extra(select={'city__state__country__name': 'country', 'city__state__name': 'state', 'city__name': 'city'})
address = address.values('country', 'state', "city", 'street', "postal_code").get()
return address
同時のobjects.filter()。extra()。values()の追加は上記と同じであることに注意してください。