2017-10-02 13 views
-1

私のモデル:なぜdjangoはコメントを表示しないのですか?

class Post(models.Model): 
    message = models.TextField(max_length=4000) 
    topic = models.ForeignKey(Topic, related_name='posts') 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(null=True) 
    created_by = models.ForeignKey(User, related_name='posts') 
    updated_by = models.ForeignKey(User, null=True, related_name='+') 


class Comments(models.Model): 
    creator = models.ForeignKey(User, related_name='comment') 
    body = models.TextField(max_length=4000) 
    post = models.ForeignKey(Post, related_name='comment', null=True) 

私の見解:

def p(request, pk): 
    topic = get_object_or_404(Topic, pk=pk) 
    post = get_object_or_404(Post, pk=pk) 
    return render(request, 'post.html', {'post': post, 'topic': topic}) 

def comments(request, pk): 
    comment = get_object_or_404(Comments, pk=pk) 
    return render(request, 'post.html', {'comment': comment}) 

私のURL:

url(r'^boards/(\d+)/(?P<pk>\d+)$', views.p, name='p'), 
url(r'^boards/(\d+)/(\d+)/$', views.comments, name='comments'), 

ポストの場合には、すべての作業を主キーを使用する際の問題は、私が理解できるように良いですが、私は別のモデルを1つのページにレンダリングしようとすると、ジャンゴはそれが好きではないように見えます。私はURLパターンで多くの組み合わせを試しましたが、私の問題を解決したものは何もありませんでした。 post.htmlページでは、投稿に関するすべての情報も変更されましたが、コメントは機能しません。重要なのは投稿と同じURLにコメントを表示することです

+5

あなたのURLはまったく同じです。あなたはDjangoがそれらを区別することをどのように期待していますか? –

+0

投稿と同じURLにコメントを表示するにはどうすればよいですか? – Anton

答えて

1

あなたの基本的な誤解は、2つのビュー(したがって2つのURL)が必要だということです。あなたはそうしない。応答全体を集めて単一のビューから返す必要があります。

1つの可能性は、ビュー自体でこれを行うことです。しかし、コメントは記事に関連しているため、最も簡単な方法は、単にテンプレート中関係に従うことです:

{{ post.message }} 
{% for comment in post.comment.all %} 
    {{ comment.body }} 
{% endfor %} 

(注、明示的related_nameを設定することにより、commentであるためにあなたの逆の関係を設定している。このと。 多くの場合コメントがありますので、ここにはない本当に良い理由がない限り、関連する名前を定義するべきではありません;デフォルトはcomment_setで、完全に有効で意味があります)

関連する問題