【问题标题】:How do I make a function in django to add comments to my reviews如何在 django 中创建一个函数来为我的评论添加评论
【发布时间】:2019-04-02 16:12:58
【问题描述】:

我有一个在 Django 上制作的网站,用户可以发表评论,我尝试制作它以便他们可以添加 cmets,但是他们添加评论只是将其保存到数据库中,而不是将其添加到帖子中。如果有人知道我可以如何更改我的代码,以便将 cmets 添加到他们发送消息的评论中,而不是他们根本不会出现在网站上。

views.py:

    from django.shortcuts import render, redirect #Render is used to show the HTML, and redirect is used when the user needs to be sent to a different page automatically.
        from .models import Review #This imports the Review database.
        from .forms import ReviewForm, CommentForm #This imports the comments and review form.
        from django.utils import timezone 
        from django.contrib.auth.decorators import login_required #This requires the user to be logged in.

        def review(request):
            return render(request, 'review/review.html') 

        @login_required(login_url='/accounts/login/') 
        def review_new(request): 
            if request.method == "POST":
                form = ReviewForm(request.POST) 
                if form.is_valid(): 
                    post = form.save(commit=False) 
                    post.date = timezone.now() 
                    post.author = request.user 
                    post.save() 
                    return redirect('/review') 
            else: 
                form=ReviewForm() 
            return render(request, 'review/post_edit.html', {'form': form}) 

        def add_comment_to_post(request): 
            if request.method == "POST": 
                form = CommentForm(request.POST) 
                    comment = form.save(commit=False) 
                    comment.Review = review 
                    comment.save() #This will save the comment to the database.
                    return redirect('reivew': review) 
            else:
                form = CommentForm() 
            return render(request, 'review/add_comment_to_post.html', {'form': form}) 

models.py:

        from django.db import models 
        from django.conf import settings 
        from django.utils import timezone 

        class Review(models.Model): 
            title = models.CharField(max_length=140) 
            body = models.TextField(max_length=3000) 
            date = models.DateTimeField()
            author=models.ForeignKey(settings.AUTH_USER_MODEL, `on_delete=models.CASCADE, null=True)` 

        class comment(models.Model): 
            review = models.ForeignKey('review.Review', on_delete=models.CASCADE, related_name='comments', null=True) 
            author=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True) 
            text = models.TextField(max_length=3000) 
            created_date = models.DateTimeField(default=timezone.now)

            def __str__(self):
                return self.text

urls.py:

from django.urls import path, include, re_path 
from django.views.generic import ListView, DetailView 
from review.models import Review 
from . import views 

urlpatterns = [ 
    path('', ListView.as_view( 
        queryset=Review.objects.all().order_by("-date")[:25], 
        template_name="review/review.html")),
    re_path('(?P<pk>(\d+))',DetailView.as_view(model=Review, template_name="review/post.html")), 
    path('new/', views.review_new, name='review_new'), 
    path('new/comment', views.add_comment_to_post, name='add_comment_to_post'), 

]

【问题讨论】:

  • 这一行:comment.Review = review 你还没有定义review 并且你正在设置一个与字段review 无关的属性Review。好吧,您已经在文件前面定义了review,但review 只是一个函数(def review(request):)。首先,您应该以某种方式获得评论:提交评论的表单应在 url 中包含评论的 id 或作为输入字段。然后你在保存之前获取它comment_review = Review.objects.get(id=review_id) 然后comment.review = comment_review
  • 有助于查看 CommentForm 类定义和模板文件。
  • 嗨,当我把你说的话当我现在去添加评论时,它说 review_id 没有定义
  • 嗨@harry boyd 是我在任何帮助下的回答。如果是这样,您能否将其标记为已接受的答案,谢谢。

标签: python django python-3.6


【解决方案1】:

我可以看到您应该将comment.Review = review 更改为comment.review = Review.objects.get(id=review_id) 之类的东西,其中review_id 是从表单传递的ID。另请注意,您的 Comment 模型允许评论为空,这意味着当前您正在添加 cmets 而不将它们正确链接到它们应该相关的原始帖子/评论。

【讨论】:

  • 嗨,当我把你说的话当我现在去添加评论时,它说 review_id 没有定义
  • @harryboyd 你用 forms.py 更新问题?我认为您可以在表单中添加一个字段,用于我希望该评论所属的评论。
  • @harryboyd 有什么帮助吗?我觉得这个视频可能对youtube.com/watch?v=Gb5ACR0jUyw也有帮助(因为那家伙的口音,你需要仔细听)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 2014-12-11
  • 2021-01-21
相关资源
最近更新 更多