2017-02-15 13 views
1

"Service"というモデルがあります。これは "Page"モデルをサブクラス化しています。Django:多対多の逆のタイプ

class Service(Page): 
    content = RichTextField(null="True", blank="True") 
    links = models.ManyToManyField("pages.Page", blank=True, related_name="service_links") 

「リンク」は、多対多の関係は、私ができるようにしたい(かかわらず、彼らがサービスされている場合の)

すべてのサービスが複数のページにリンクできるようにする必要があります。これは、以下のように定義されていますこれらの結果を独自のサービスページ(この例ではページAと呼ぶ)にプルして、これらのリンクをエンドユーザーに表示できるようにします。

私は現在、 related_links = Service.objects.filter(links=request.page.id)を使用していますが、これはページAのリンクではなく、ページAを指し示すページに対してのみ機能します。

このフィルタを逆にして、ページAのリンクを取得するにはどうすればよいですか? ID Nのページについては

答えて

0

:あなたが必要

Page.objects.get(id=N).service_set.all() 
+0

ありがとうございますが、私にはAttributeErrorが返されます: 'Page'オブジェクトには 'service_set'属性がありません –

+0

あなたはどのバージョンのDjangoを使用していますか?また、Pageは 'models.Model'から継承していますか? –

+0

Django 1.10.5では、ページモデルはメザニンからのモデルに基づいています(https://github.com/stephenmcd/mezzanine/blob/master/mezzanine/pages/models.py#37を参照)。 –

0

'in' ジャンゴ・ルックアップ

related_links = Service.objects.filter(links_in=request.page.id) 
0

だから、解決策が予想よりもはるかに簡単だったことが判明。

related_links = list() 
for link in request.page.service.links.all(): 
    related_links.append(link) 

これがメザニン固有のものかジェネリックなジャンゴのものなのかどうかは分かりませんが、これはうまくいくようです。