2016-08-04 8 views
0

私は、次のマネージャーを持っている:customerが別のオブジェクトとFKの関係であるDjangoは、私はクエリセットの.values内の表示名を取得するにはどうすればよい()

class Totals(Manager): 

def by_customer_and_date(self, start_date, end_date): 

    qs = self.model.objects.filter(
     date__range=(start_date, end_date) 
    ).values(
     "customer" 
    ).annotate(
     ...bunch of stuff... 
    ) 

    return qs 

。現在、クエリーセットはオブジェクトのIDであるcustomerのIDをパックしますが、代わりに表示名を使用したいので、テンプレート用にすべてをうまくまとめることができます。今の

、私はマネージャに次を追加しました:

for q in qs: 
    q['customer'] = Customer.objects.get(id=q.get('customer')).name 

それが正常に動作しますが、それは余分な作業のように感じている...私のためにそれは1とは対照的に、50本のデータベースのヒットです。表示名をバットの直後にqs辞書に入れるためのショートカットはありますか?

答えて

2

__を使用すると、関連するオブジェクトフィールドにアクセスできます。

qs = self.model.objects.filter(
    date__range=(start_date, end_date) 
).values(
    "customer__name" 
) 
+0

右。私はDjangoが大好きです。今私はテンプレートで '{{item.customer__name}}' –

1

また、関連テーブルのフィールドを選択するには、このようなあなたの.values("customer__name")値内__を使用することができます。

0

関連するすべての顧客名を取得するには、このコードを使用します。

class Totals(Manager): 

def by_customer_and_date(self, start_date, end_date): 

    name_list = self.model.objects.filter(
     date__range=(start_date, end_date) 
    ).values("customer__name", flat=True) 

    return name_list 
関連する問題