2011-08-08 33 views
0

私はすべての原稿のリストをdb内に取得しようとしていますが、それぞれの棚番を印刷して、他の原稿とリンクしている場合は、それらの写本の棚板。ここでDjango自己参照多対多関係の照会

は私のモデルがどのように見えるかです:ここでは

class MSS(models.Model): 
    shelfmark = models.CharField(max_length=50) 
    MSSLink = models.ManyToManyField('self',through='MSSLink',symmetrical=False) 
    [...] 

class MSSLink(models.Model): 
    link1 = models.ForeignKey('MSS', related_name='First_MSS') 
    link2 = models.ForeignKey('MSS', related_name='Second_MSS') 
    [...] 

質問は私のテンプレートで何をするか、次にあるviews.py

def show_all_MSS(request): 
    all_MSS = MSS.objects.select_related().all() # get all MSS  
    t = loader.get_template('list.html') 
    c = Context({'all_MSS': all_MSS, }) 
    return HttpResponse(t.render(c)) 

のコードがあります。私はこのような何かを考えたが、私はforループ内の現在のMSは、それらのshelfmarksを表示する方法別のMSにそうであればリンクされているかどうかをテストすることができますかわからない:

{% if all_MSS %} 
    <ul> 
    {% for i in all_MSS %} 
     <li><a href="/MSS/{{ i.shelfmark}}/">{{ i.shelfmark }}</a></li> 
      {% if i.MSSLink %} 
      <p>This MS is linked to the following MSS: {{ i.MSSLink.link1 }}</p> 
      {% endif %} 
    {% endfor %} 
    </ul> 
{% else %} 
    <p>No MSS found</p> 
{% endif %} 

答えて

0

あなたモデルは少し複雑である - あなたはおそらくMSSLinkを取り除くことができます:

class MSS(models.Model): 
    shelfmark = models.CharField(max_length=50) 
    links = models.ManyToManyField('self', symmetrical=False, blank=True) 

    def __unicode__(self): 
     return self.shelfmark 

とテンプレートにこれを追加します。

{% if i.links.all %} 
<ul> 
    {% for l in i.links.all %} 
     <li><a href="/MSS/{{ l.shelfmark}}/">{{ l.shelfmark }}</a></li> 
    {% endfor %} 
</ul> 
{% endif %} 
+0

私はとの間のリンクを作ったユーザーに関する情報を取得するためにMSSLinkテーブルを必要としますマヌスクリプト、リンクされた時間、リンクの理由私はスペースを節約するために私の質問でそれらのフィールドを省略しました。混乱させて申し訳ありません。テンプレートのコードはすべての原稿だけをリストしていますか?私はすべての原稿をリストアップする方法を探していて、他の原稿にもリンクされていれば、その棚番も表示されます。どうもありがとう! – DigitalMusicology

+0

ループの3番目のものが必要です: '{%for l2 in ls.links.all%}' – Udi

関連する問題