2017-07-20 3 views
0

私は記事を表すDjangoクラスを持っています。時には、一件の以上の他の記事の1つの記事のコメントと私は次のように再帰的な多対多の関係を使用して、クラスでこの関係を表しています再帰的な多対多リレーションシップからDjangoオブジェクトを取得するにはどうすればよいですか?

class Article(models.Model): 
    comments_on = models.ManyToManyField('self', blank=True) 

を私はお互いに成功し、関連する記事をしたと思いますcomments_onフィールドで複数の記事を選択して管理インターフェースに表示します。ある記事(id1)が他の2つの記事(id2とid3)についてコメントしたとします。 id1のcomments_on属性にアクセスする方法がわからないので、id2とid3がDjangoのテンプレートに表示されます。

私が試した:

{{ [instance of Article object].comments_on }} 

を私が得るすべては次のとおりです。

[name of my app].Article.None 

私は(1)どのように私は、この属性にアクセスし、それを表示するのですか知りたいですか?そして、(2)一度に関連する記事の1つにどうやってアクセスすればよいですか?たとえば、id1がid2とid3の両方にコメントする場合、id2だけ、またはid3だけを表示するにはどうすればよいですか?

+1

をウェルcomments_onは、M2M分野であるあなたは) 'Article.comments_on.all(から返されたクエリセットをループするために行う必要がある'とそれらを表示したいので、属性。 –

+0

ありがとうございます。 myvariable = Article.comments_on.all()でviews.pyの関数内の変数に割り当てようとしましたが、次にhtmlファイル内でmyvariableをループしようとしましたが、 'ManyToManyDescriptor'というオブジェクトのAttributeErrorが返されました'all'属性はありません – henrich

+1

まず、 'Article'はモデルのクラス名です。 'Article.comments_on'は' ManyToManyDescriptor'関数を返します。 クエリーセットを取得するには '[instance of Article] .comments_on.all()'を呼び出すだけです。 – zaidfazil

答えて

0

あなたのアドバイスありがとうございます。次のようにあなたのコメントに基づいて、私はそれを解決:

myvariable = Article.objects.all() 

をしてから、私はWebページで変数をレンダリングすることができるようにコンテキスト辞書にそれを渡さ:

をviews.pyでは、私が書きました。テンプレートに

、私が書いた:

{% if item.comments_on.all.count == 1 %} 
    {% for key in item.commented_on_by.all %} 
     <strong>This study criticized:</strong> <a href="#">{{ key }}</a> 
    {% endfor %} 
{% endif%} 

    {% if item.comments_on.all.count > 1 %} 
    <strong>This study criticized:</strong> 
    <ul> 
     {% for key in item.comments_on.all %} 
     <li><a href="#">{{ key }}</a></li> 
     {% endfor %} 
    </ul> 
    {% endif%} 
関連する問題