Python 所有评论都链接到所有帖子

Python 所有评论都链接到所有帖子,python,html,django,Python,Html,Django,我试图建立一个博客,让一些用户可以发表评论。 但是现在我看到我的评论已经连接到了所有的帖子。我的意思是,当我点击一篇文章时,通常我只会看到它的评论,但我看到了所有的评论。多谢各位 models.py from django.db import models from django.contrib.auth.models import User from django.utils.text import slugify # Create your models here. class PostM

我试图建立一个博客,让一些用户可以发表评论。 但是现在我看到我的评论已经连接到了所有的帖子。我的意思是,当我点击一篇文章时,通常我只会看到它的评论,但我看到了所有的评论。多谢各位

models.py

from django.db import models
from django.contrib.auth.models import User
from django.utils.text import slugify
# Create your models here.

class PostModel(models.Model):
    post = models.TextField(max_length=256, unique=True)
    slug = models.SlugField(max_length=20, unique=True)
    author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='post_author')
    created_on = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-created_on']

    def save(self, *args, **kwargs):
        self.slug = self.slug or slugify(self.post)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.post


class CommentModel(models.Model):
    post = models.ForeignKey('dictionary.PostModel', on_delete=models.CASCADE, related_name='post_comment')
    comment=models.TextField(max_length=256,unique=True)
    author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='comment_author')
    created_on = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-created_on']


    def get_absolute_url(self):
        return reverse("comment_detail",kwargs={'pk':self.pk})


    def __str__(self):
        return self.comment
views.py

from django.shortcuts import render,redirect
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views import generic
from django.views.generic.edit import FormMixin
from .models import PostModel,CommentModel
from .forms import PostForm,CommentForm



# Create your views here.
class PostList(LoginRequiredMixin,generic.CreateView):
    template_name = 'home.html'
    form=PostForm
    model = PostModel
    fields=['post']
    success_url="/home"

    def form_valid(self, form):
        form.instance.author=self.request.user
        return super().form_valid(form)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context ['postmodel_list'] = PostModel.objects.order_by('-created_on')
        return context




class PostDetail(generic.DetailView):
    template_name = 'post_detail.html'
    form=CommentForm
    model = PostModel
    fields=['comment']
    success_url="/post_detail"

    def form_valid(self, form):
        form.instance.author=self.request.user
        return super().form_valid(form)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context ['commentmodel_list'] = CommentModel.objects.order_by('-created_on')
        return context
forms.py

from .models import PostModel,CommentModel
from django import forms

class PostForm(forms.ModelForm):
    class Meta:
        model=PostModel
        fields=['post','author']

class CommentForm(forms.ModelForm):
    class Meta:
        model=CommentModel
        fields=['comment','author']
        label=''
post_detail.html

{% extends 'base.html' %}
{% block content %}
{% load crispy_forms_tags %}
<div class="container">
  <div class="row">
    <div class="col-md-8 mt-3 left mx-auto">
      <div class="card mb-4 block">
        <div class="card-body">
          <h1 class="card-title">{% block title %} {{ postmodel.post }} {% endblock title %}</h1>
          <p class=" text-muted"><a style="text-decoration:none" href="#">@{{ postmodel.author }} </a>| {{ postmodel.created_on }}</p>
          <p class="card-text ">{{ object.content | safe }}</p>
        </div>
      </div>
    </div>
    <div class="col-md-8 mt-3 left mx-auto">
        {% for comments in commentmodel_list %}
        <div class="card mb-4 block">
            <a class="overlay" href="{% url 'comment_detail' postmodel.slug comments.pk %}"style="text-decoration:none"> </a>
            <div class="card-body inner">
              <p style="text-align:right;float:right;margin-top:10px;" class="card-text text-muted h6"><a style="text-decoration:none" href="https://google.com">@{{ comments.author }}</a> </p>
              <h2 class="card-title">{{ comments.comment }}</h2>
            </div>
        </div>
        {% endfor %}
      </div>
  </div>
</div>




<div class="col-md-3 float-right ">
  <button style= "position: fixed; bottom:50px;" type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo">Add New Comment</button>
</div>

<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
 <div class="modal-dialog" role="document">
   <div class="modal-content">
     <div class="modal-header">
       <h5 class="modal-title" id="exampleModalLabel">Add Comment</h5>
     </div>
     <div class="modal-body">
       <form method="post" style="margin-top: 1.3em;">
         {% csrf_token %}
         {{ form|crispy }}
         <div class="modal-footer">
           <button type="submit" class="btn btn-primary">Submit</button>
           <button type="submit" class="btn btn-secondary" data-dismiss="modal">Close</button>
         </div>
       </form>
     </div>
   </div>
 </div>
</div>


<style>
  .card{
    box-shadow: 0 16px 48px #E3E7EB;
  }
</style>
{% endblock content %}
{%extends'base.html%}
{%block content%}
{%load crispy_forms_tags%}
{%block title%}{{postmodel.post}{%endblock title%}

{{postmodel.created_on}

{{object.content | safe}

{commentmodel_列表%中的注释为%0}

{{comments.comment}} {%endfor%} 添加新注释 添加注释 {%csrf_令牌%} {{form | crispy}} 提交 接近 .卡片{ 盒影:0 16px 48px#E3E7EB; } {%endblock内容%}
没有链接到所有的
Post
s,您只是没有过滤注释集:

class PostDetail(generic.DetailView):
    # …

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context ['commentmodel_list'] = CommentModel.objects.filter(
            post=self.object
        ).order_by('-created_on')
        return context
class postdail(generic.DetailView):
# …
def获取上下文数据(自身,**kwargs):
context=super()。获取上下文数据(**kwargs)
上下文['commentmodel_list']=commentmodel.objects.filter(
post=self.object
).order_by('-created_on'))
返回上下文
您还可以反向访问关系:

class PostDetail(generic.DetailView):
    # …

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context ['commentmodel_list'] = self.object.post_comment.order_by('-created_on')
        return context
class postdail(generic.DetailView):
# …
def获取上下文数据(自身,**kwargs):
context=super()。获取上下文数据(**kwargs)
context['commentmodel_list']=self.object.post_comment.order_by('-created_on'))

返回上下文
在帖子详细信息中,您将所有CommentModel对象分配给上下文,而不是按帖子过滤

def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context ['commentmodel_list'] = CommentModel.objects.order_by('-created_on')
        return context
试一试

def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context ['commentmodel_list'] = CommentModel.objects.filter(post=self.object).order_by('-created_on')
        return context