2016-11-19 2 views
1

私はラベル付けの問題がありますが、それはかなり簡単ですが、奇妙なことに、それを行う方法を見つけることができません。Django:オブジェクトにキーエイリアスを宣言します。フィルタ関数

私は、このフィルタリング機能に

def search(cls, query): 
    return cls.objects.filter(label__icontains=query) 

を持っていると私のモデルは、単にキーとラベルフィールドで構成されています。私が取得することは、この

[{"id": 20, "label": "Title 1"}, {"id": 22, "label": "Title 2"}] 

のように見えます。しかし、私はちょうど私の出力の使用の代わりに「ラベル」と「キー」の代わりに「ID」、別名の「名前」にしたい、このように:

[{"key": 20, "name": "Title 1"}, {"key": 22, "name": "Title 2"}] 

これらのエイリアスをフィルタ機能に直接宣言するにはどうすればいいですか?

答えて

1

djangoのFという表現を利用することができます。

def search(cls, query): 
    qs = cls.objects.filter(label__icontains=query) 
    return qs.annotate(key=F('id'), name=F('label')).values('key', 'name') 

このようにして、djangoは基本的にクエリSELECT id as key, label as name FROM ...を生成します。

+0

うわー、それは素晴らしい作品です!あなたは非常にあなたを賞賛してくれました。 –