2011-07-26 42 views
4

djangoクエリセットにカラム名のエイリアスを書き込む方法。 MySQLでは、例えばdjango:クエリセットにエイリアスを書く方法

select m as n, b as a from xyz 

iはDjangoのクエリセットでこれをどのように行うことができますか?

models.Table.objects.all().values('m', 'b) 

本当にありがとうございます。

+0

私は可能であったこと、それは本当に驚くことでしょう。 DjangoとPlain SQLの違いは、フィールドがDjangoのModelのフィールドにマップされているのに対して、SQLでは戻ってくる名前には制約がないことです。フィールド名の別名を付けることができたとしても、モデルの機能が損なわれます。 –

+0

ORMを使用して2つのテーブルからクエリを実行しているので、出力はa = [{name: 'ab'、am: 'xy'}、{a_name: 'ab'、pm: 'mm'}]。ここでnameとa_nameは同じ値だが違うキーなので、フィールド値のエイリアスを作成すれば、{name: 'ab'、pm: 'mm'}を得ることができます。 – sush

答えて

0

本当にあなたが何をしようとしているのか理解できませんが、あなたが探しているように聞こえるのは、extraクエリーセットメソッドです。これはほとんどの目的のためにASがSQLと同じように動作します。

3

コメントにあなたの理由は意味がありません。モデルの各フィールドにはデータベース内に独自の列があり、それらを混在させる危険は決してありません。もちろん、フィールド名と異なるの列名を使用するフィールドを伝えることができます。

​​3210

をしかし、それはあなたを助ける場合、私はまだあなたの問題が何であるかを知らないので、私は、知りません。

1

私はこれが不可能であると推測していますので、追加する機能のチケットを調達しました。これを行うにはメリットがあると思います。詳細はチケットをご覧ください。

https://code.djangoproject.com/ticket/16735

+0

Thats gr8 alex、thanks a bunch – sush

8

これはextra(select={'n':'m','a':'b'})を使用して前に行われている可能性がありますが、私はこれは本当にvalues()自体の一部となっている必要があることに同意するものとします。

この目的のために、私はjust postedpatchというこの機能を追加しました。私はあなたがそれが役に立つと思うよ!

+3

extra isnt django 1.4の値で上記のように動作します –

+0

パッチは実際にそれをプロダクトにしましたか? – JSmyth

1

あなたが好きなあなたはF expressionで、フィールドに注釈を付けることができます。

from django.db.models import F 

models.Table.objects.all().values('m', 'b').annotate(n=F('m'), a=F('b')) 
関連する問題