Python 所有评论都链接到所有帖子
我试图建立一个博客,让一些用户可以发表评论。 但是现在我看到我的评论已经连接到了所有的帖子。我的意思是,当我点击一篇文章时,通常我只会看到它的评论,但我看到了所有的评论。多谢各位 models.pyPython 所有评论都链接到所有帖子,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
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