2016-09-18 23 views
0

私はブログアプリ、記事アプリ、コメントアプリを持っているので、django 1.9.9/python 3.5でプロジェクトをやっています。コメントアプリは、一般的にブログや記事に関連している必要があります。私の問題は、テンプレートが私のコメントを表示していないということです。コメントは作成され、投稿/記事に関連しているので、私は管理者に見ることができるので、コメント作成の問題ではありません。彼らは単に私のテンプレートに表示されていません。コメントはまだ投稿されていません。

私のコメント/ models.py:

from django.db import models 


class Comment(models.Model): 

    post = models.ForeignKey('blog.Entry',related_name='post_comments', blank=True, null=True) 
    article = models.ForeignKey('articles.Article', related_name='article_comments', blank=True, null=True) 
    body = models.TextField() 
    created_date = models.DateTimeField(auto_now_add=True) 

def __str__(self): 
    return self.body 

マイcommments/views.py:

from django.utils import timezone 
from django.shortcuts import render, get_object_or_404 
from django.shortcuts import redirect 

from .forms import CommentForm 
from .models import Comment 
from blog.models import Entry 
from articles.models import Article 
from blog.views import post_detail 
from articles.views import article_detail 



def article_new_comment(request, pk): 
    article = get_object_or_404(Article, pk=pk) 
    if request.method == "POST": 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      comment = form.save(commit=False) 
      comment.article = article 
      comment.created_date=timezone.now() 
      comment.save() 
      return redirect(article_detail, pk=article.pk) 
    else: 
     form=CommentForm() 
    return render(request, 'comments/add_new_comment.html', {'form': form}) 



def blog_new_comment(request, pk): 
    post = get_object_or_404(Entry, pk=pk) 
    if request.method == "POST": 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      comment = form.save(commit=False) 
      comment.post = post 
      comment.created_date = timezone.now() 
      comment.save() 
      return redirect(post_detail, pk=post.pk) 
    else: 
     form=CommentForm() 
    return render(request, 'comments/add_new_comment.html', {'form': form}) 

そして、ここではコメントがあるべき私のpost_detail.html、です。彼らはまったく同じですので、私はarticle_detail.htmlを投稿しません:

{% extends 'blog/base.html' %} 
{% block content %} 
    <div class="post"> 
     {% if post.modified_date %} 
      <div class="date"> 
       {{ post.modified_date }} 
      </div> 
     {% else %} 
      <div class="date"> 
       {{ post.published_date }} 
      </div> 
     {% endif %} 
     <a class="btn btn-default" href="{% url 'post_edit' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"> Edit Post </span></a> 
     <h1>{{ post.title }}</h1> 
     <p>{{ post.text|linebreaksbr }}</p> 
     <hr> 
     <a class="btn btn-default" href="{% url 'new_blog_comment' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"> Add Comment </span></a> 
     {% for comment in post.comments.all %} 
      <div class="comment"> 
       <div class="date">{{ comment.created_date }}</div> 
       <p>{{ comment.body|linebreaksbr }}</p> 
      </div> 
     {% empty %} 
      <p>No comments here yet</p> 
     {% endfor %} 
    </div> 
{% endblock %} 

を、私はこの問題を考えていませんが、ビュー、その他のファイルは、ブログ/モデルのように、私を助けるためにあなたを助けるならば、私に教えてくださいある。

答えて

2

投稿の関連する名前を明示的にpost_commentsに設定しました。だから、同じようにアクセスする必要があります:

{% for comment in post.post_comments.all %} 

これはあなたのテンプレートにpostを想定しているEntryモデルのインスタンスを参照します。

+0

はい!どうもありがとうございます。私はかなり新しいジャンゴで、時には私はこのような明らかなエラーを見つけることができません。 –

+0

問題ありません。多くの分野で 'Article'と' Entry'を同様の方法で使用している場合(例えば、両方とも 'Comment'sが付いている場合)、それらを基底モデルからサブクラス化してから、' Comment'をそれぞれのフィールドを持つのではなく、ベースモデル。 https://docs.djangoproject.com/en/1.10/topics/db/models/#multi-table-inheritanceを参照してください。 –

関連する問題