django - 我在主页上有一个评论模型,但它不会自动检测我在所有帖子中写评论的帖子
问题描述
所以我遇到的错误。pk无法识别。因为主页上的帖子太多了。我一直试图通过将 pk 更改为 id 来解决这个问题,以多种方式更改我的评论模型。但是没有用
真正的原因是我必须进入详细视图,以便页面可以轻松检测。哦,看他在这个页面路径('post//', PostDetailView.as_view(), name ="post-detail")上,所以我们可以将此评论保存在特定的 post.pk 上。但我希望一切都连接起来
NameError at / name 'pk' 未定义
class PostListView(ListView, DetailView):
model = Post
template_name = "blog/home.html" # <app>/model>_viewtype>html
context_object_name = "posts"
paginate_by = 15
template = loader.get_template('blog/post_detail.html')
def get(self, request, *args, **kwargs):
posts = Post.objects.all().order_by("-id")
gallerys = Gallery.objects.all()
comments = Comment.objects.filter()
likes = Post.objects
post = request.POST.get(Post)
# cnc = Contact.objects.all()
today = timezone.now().date()
is_liked = False
# if posts.likes.filter(id = request.user.id).exists():
# is_liked = True
comment_form = CommentForm(request.POST or None)
context = { 'posts': posts, "likes": likes,"comment_form":comment_form, "comments": comments, "gallerys":gallerys, "today": today}
# return render(request, "blog/home.html")
return render(request, "blog/home.html", context)
def post(self, request, *args, **kwargs):
form = PostForm()
posts = Post.objects.all().order_by("-id")
data2 = Gallery.objects.all()
comments = Comment.objects.filter()
likes = Post.objects
today = timezone.now().date()
is_liked = False
comment_form = CommentForm(self.request.POST or None )
if comment_form.is_valid():
form.instance.author = request.user
post = form.save(commit = False)
content = request.POST.get("content")
# post = request.POST.get(Post)
post = get_object_or_404(Post, pk = pk)
comment = Comment.objects.create(post = post, author = request.user, content= content)
comment.save()
return render(request, "blog/home.html", {'posts': posts, "likes": likes,"comment_form":comment_form, "comments": comments, "today": today})
else:
comment_form = CommentForm()
return render(request, "blog/home.html", {'posts': posts, "likes": likes,"comment_form":comment_form, "comments": comments, "gallerys":gallerys, "today": today})
class Post(models.Model):
STATUS_CHOICES = {
("draft", "Draft"),
("published", "Published"),
}
author = models.ForeignKey(User, on_delete = models.CASCADE )
title = models.CharField(max_length= 100, null=True, blank=True, default="Başlık")
content = models.TextField(blank =True, null=True, default = "Enter your content")
.....
objects = models.Manager
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
def get_absolute_url(self):
return reverse("post-detail", kwargs={"pk": self.pk})
def save(self, *args, **kwargs):
self.slug = self.__str__()
return super(Post, self).save(*args, **kwargs)
#it will show not <Question: Question object (1)> but the authors name or title
def __str__(self):
return f"{self.pk}"
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete = models.CASCADE)
author = models.ForeignKey(User,on_delete=models.CASCADE)
content = models.TextField(verbose_name='content', default="Başlık")
timestamp = models.DateTimeField(default=timezone.now)
# Name = models.CharField(max_length = 100, default="Başlık")
# Email = models.EmailField(max_length = 100)
# Body = models.TextField()
# Active = models.BooleanField(default = True)
# Parent = models.ForeignKey("self", on_delete = models. CASCADE, null = True, blank = True, related_name = "replies")
objects = models.Manager
def __str__(self):
return f"{self.pk}"
def get_absolute_url(self):
return reverse("blog:post-detail", kwargs={
'pk': self.pk
})
#blog app
from . import views
urlpatterns = [
path('', PostListView.as_view(), name ="blog-home"),
path('user/<str:username>', UserPostListView.as_view(), name ="user-posts"),
path('post/<int:pk>/', PostDetailView.as_view(), name ="post-detail"),
path('post/new/', PostCreateView.as_view(model=Post, success_url=('/')), name ="post-create"),
path('contact/', contact.as_view(), name ="blog-contact"),
url(r'^$', views.HomeView.as_view(), name='home'),
]
解决方案
事实证明,这更像是迁移问题而不是编码问题。Django 应该提供移民问题的解释,因为它是一个很好的起始语言,应该更加用户友好。
删除数据库中的帖子并迁移而不删除以前的帖子后,它仍然认为帖子上有PK。但是,在关系帖子中删除了用户的 PK,它会出错。无论如何,这可能会有所帮助:
python3 manage.py migrate --fake youtubeapi python manage.py migrate --run-syncdb
python manage.py makemigrations youtubeapi python manage.py makemigrations youtubeapi --empty python manage.py migrate youtubeapi zero python manage.py makemigrations youtubeapi python manage.py squashmigrations youtubeapi 0001_initial python manage.py squashmigrations youtubeapi 0001 python manage.py squashmigrations youtubeapi 0001_squashed_0001_initial
推荐阅读
- python - 使用 linux 或 python 查找 mp3 声音样本的时间戳
- javascript - 如何在标签重新加载时实现状态持久性?
- javascript - 如何删除 Bang Bang?
- delphi - 如何从 TWebBrowser 获取图像到 TImage
- java - 克隆一个 LLL 并增加 java 中的每个元素
- javascript - 如何保存正在使用 Cypress 测试的页面的整个 HTML 源代码
- leaflet - 如何在 Leaflet.IconMaterial 中设置图标尺寸?
- r - 如何使用 ggplot 绘制带有错误图的分组交叉条图?
- html - CSS样式文本以获取边距
- javascript - 路由未从导航参数更新状态