2017-12-10 5 views
-1

내 게시물의 응답/주석 달기 시스템을 만들고 있습니다. 그리고 models.py가 보이는 방법은 다음과 같습니다.Django 주석 달기 시스템

기본적으로 답변/댓글이 게시물 세부 사항에 표시되어 있습니다. 내 게시물 세부 모양은 다음과 같습니다.

<!DOCTYPE html> 
{%load staticfiles%} 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css"> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <meta name="keywords" content="footer, address, phone, icons" /> 
    <link href="https://fonts.googleapis.com/css?family=Abel|Raleway|Signika|Signika+Negative" rel="stylesheet"> 
    <title>Ask Uptown</title> 
    <style media="screen"> 


    .logo-text span{ 
     color: #5383d3; 
    } 


    .backgr{ 
     background-color: #7F7F7F; 
     height: 13vh; 
     width: 100%; 
     background-size: cover; 
     background-position: center; 
    } 



    header{ 
     background: src(.backgr); 
    } 

    .no-ans{ 
    position: relative; 
    top: 50px; 
    left: 50px; 
    font-size: 20px; 
    } 

.add-comment{ 
    position: relative; 
    text-decoration: none; 
    z-index: 99; 
    position: relative; 
    display: flex; 
    justify-content: center; 
    align-items: center; 
    width: 300px; 
    height: 40px; 
    background: linear-gradient(45deg, #B388EB, #8093F1); 
    border-radius: 20px; 
    color: #FFF; 
    font-size: 20px; 
    letter-spacing: 1px; 
    font-weight: 200; 
    left: 1100px; 
    text-decoration: none; 
    left: 800px; 
    top: 75px; 
} 
    </style> 
    </head> 
    <body> 

<header> 

<div class="backgr"> 
    <nav class="" role="navigation" id="navbar"> 
      <div class=""> 
      <div class="logo"> 
       <a class="logo-text" href="{% url 'home' %}"><h3>Uptown<span>Ask</h3></span></a> 
      </div> 


       <ul class="main-nav"> 
       {% if user.is_authenticated %} 
         <li class="active"><a href="{% url 'home' %}">Home</a></li> 
         <li><a href="{% url 'posts:create' %}">Stuck? Ask A question</a></li> 
         <li><a href="{% url 'groups:all' %}">Groups</a></li> 
         <li><a href="#">Contact</a></li> 
         <li><a href="{% url 'accounts:logout' %}">Log out</a></li> 
       {% else %} 
         <li class="active"><a href="{% url 'home' %}">Home</a></li> 
         <li><a href="{% url 'groups:all' %}">Groups</a></li> 
         <li><a href="{% url 'accounts:login' %}" >Log in</a></li> 
         <li><a href="{% url 'accounts:signup' %}" >Sign up</a></li> 
         <li><a href="#">Contact</a></li> 
       {% endif %} 
       </ul> 

      </header> 

      <section> 

      {% block post_content %} 
      <div class="col-md-8"> 
       {% include "posts/_post.html" %} 
      </div> 
      {% endblock %} 

       <a class="add-comment" href="{% url 'posts:add_comment_to_post' pk=post.pk%}">Answer This Question</a> 

      {% for comment in post.comments.all %} 
      <br> 
       {% if user.is_authenticated %} 

         {{ comment.created_date }} 
         {% if not comment.approved_comment %} 
          <a class="btn btn-default" href="{% url 'comment_remove' pk=comment.pk %}"><span class="glyphicon glyphicon-remove"></span></a> 
          <a class="btn btn-default" href="{% url 'comment_approve' pk=comment.pk %}"><span class="glyphicon glyphicon-ok"></span></a> 
         {% endif %} 

        <p>{{ comment.text|safe|linebreaks }}</p> 
        <p>Posted by: <strong>{{ comment.author }}</strong></p> 

       {% endif %} 
      {% empty %} 
       <p class="no-ans">No Answer's posted.</p> 
      {% endfor %} 
      </div> 


      </section> 


    <footer class="footer-distributed"> 

    <div class="footer-left"> 

    <h3>Uptown<span>Ask</span></h3> 

    <p class="footer-links"> 
    <a href="#">Home</a> 
    · 
    <a href="#">Blog</a> 
    · 
    <a href="#">About</a> 
    · 
    <a href="#">Contact</a> 
    </p> 

    <p class="footer-company-name">Ask Uptown &copy; 2017</p> 
    </div> 

    <div class="footer-center"> 

    <div class="adress-sec"> 
    <p class="p-adress">Address: Tripoli Street, Algeria Road, Mirdif Area - Dubai, United Arab Emirtes</p> 
    </div> 

    <div class="phone-sec"> 
    <p>Phone: 04 251 5001</p> 
    </div> 

    <div class="email-sec"> 
    <p class="p-email"><a href="mailto:[email protected]">Email: [email protected]</a></p> 
    </div> 

    </div> 

    <div class="footer-right"> 

    <p class="footer-company-about"> 
    <span>About the company</span> 
    Lorem ipsum dolor sit amet, consectateur adispicing elit. Fusce euismod convallis velit, eu auctor lacus vehicula sit amet. 
    </p> 

    <div class="icons"> 

    <a href="https://www.twitter.com" target="_blank"><img src="images/twitter.png" alt="Twitter" class="twitter" ></a> 
    <a href="https://www.facebook.com" target="_blank"><img src="facebook.png" alt="Facebook" class="facebook" ></a> 
    <a href="https://www.instagram.com" target="_blank"><img src="insta.png" alt="Instagram" class="instagram" ></a> 

    </div> 

    </div> 

    </footer> 
    </body> 
</html> 

다음은 실제 사이트에서 보이는 모습입니다. PIcture of how the post detail looks on the actual site 하지만 게시 할 때 댓글/답변을 표시하는 데 문제가 있습니다. 관리자를 사용하여 게시하지 않으면 표시되지 않습니다. 여기

Picture for error 내 견해와 urls.py 다음과 같습니다 : 나는 대답에이 질문에 버튼을 클릭하면 그것은 나에게 오류를 제공

from django.contrib import messages 
from django.contrib.auth.mixins import LoginRequiredMixin 

from django.core.urlresolvers import reverse_lazy 
from django.http import Http404 
from django.views import generic 

from braces.views import SelectRelatedMixin 

from . import forms 
from . import models 

from django.contrib.auth import get_user_model 
User = get_user_model() 


class PostList(SelectRelatedMixin, generic.ListView): 
    model = models.Post 
    select_related = ("user", "group") 


class UserPosts(generic.ListView): 
    model = models.Post 
    template_name = "posts/user_post_list.html" 

    def get_queryset(self): 
     try: 
      self.post_user = User.objects.prefetch_related("posts").get(
       username__iexact=self.kwargs.get("username") 
      ) 
     except User.DoesNotExist: 
      raise Http404 
     else: 
      return self.post_user.posts.all() 

    def get_context_data(self, **kwargs): 
     context = super().get_context_data(**kwargs) 
     context["post_user"] = self.post_user 
     return context 


class PostDetail(SelectRelatedMixin, generic.DetailView): 
    model = models.Post 
    select_related = ("user", "group") 

    def get_queryset(self): 
     queryset = super().get_queryset() 
     return queryset.filter(
      user__username__iexact=self.kwargs.get("username") 
     ) 


class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView): 
    # form_class = forms.PostForm 
    fields = ('message','group') 
    model = models.Post 

    # def get_form_kwargs(self): 
    #  kwargs = super().get_form_kwargs() 
    #  kwargs.update({"user": self.request.user}) 
    #  return kwargs 

    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     self.object.user = self.request.user 
     self.object.save() 
     return super().form_valid(form) 


class DeletePost(LoginRequiredMixin, SelectRelatedMixin, generic.DeleteView): 
    model = models.Post 
    select_related = ("user", "group") 
    success_url = reverse_lazy("posts:all") 

    def get_queryset(self): 
     queryset = super().get_queryset() 
     return queryset.filter(user_id=self.request.user.id) 

    def delete(self, *args, **kwargs): 
     messages.success(self.request, "Post Deleted") 
     return super().delete(*args, **kwargs) 



def add_comment_to_post(request, pk): 
    post = get_object_or_404(Post, pk=pk) 
    if request.method == "POST": 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      comment = form.save(commit=False) 
      comment.post = post 
      comment.save() 
      return redirect('post_detail', pk=post.pk) 
    else: 
     form = forms.CommentForm() 
    return render(request, 'posts/comment_form.html', {'form': form}) 



def comment_remove(request, pk): 
    comment = get_object_or_404(Comment, pk=pk) 
    post_pk = comment.post.pk 
    comment.delete() 
    return redirect('post_detail', pk=post_pk) 

사용자가 댓글을 삭제하기위한 기반 뷰입니다 comment_remove 기능/대답. add_comment_to_post는 주석/응답을 게시하는 클래스입니다.

from django.conf.urls import url 

from . import views 

app_name='posts' 

urlpatterns = [ 
    url(r"^$", views.PostList.as_view(), name="all"), 
    url(r"new/$", views.CreatePost.as_view(), name="create"), 
    url(r"by/(?P<username>[-\w]+)/$",views.UserPosts.as_view(),name="for_user"), 
    url(r"by/(?P<username>[-\w]+)/(?P<pk>\d+)/$",views.PostDetail.as_view(),name="single"), 
    url(r"delete/(?P<pk>\d+)/$",views.DeletePost.as_view(),name="delete"), 
    url(r'^post/(?P<pk>\d+)/comment/$', views.add_comment_to_post, name='add_comment_to_post'), 
    url(r'^comment/(?P<pk>\d+)/remove/$', views.comment_remove, name='comment_remove'), 
] 

I'cant은 장고 천재 경우, plzz 도움이 주석의 포스트 세부 아래를 보여줄 수있는 방법을 찾을 것 같다.

답변

0

변경 :

post = models.ForeignKey('posts.Post', related_name='posts') 

post = models.ForeignKey('posts.Post', related_name='comments') 

에 따라서 템플릿의 'post.comments.all는'

를 작동