Комментарий не отображается в django после отправки

#python #django

#python #django

Вопрос:

Я попытался отправить комментарий из приложения, а не из django admin. Комментарий не отображается при отправке из моего созданного приложения. Но он отображается, когда я добавляю комментарий из приложения администратора django. Может быть, я делаю что-то не так в views.py досье. Кто-нибудь может мне помочь в этом? Спасибо. views.py:

 @login_required
def book_review(request,id):
book = get_object_or_404(Bookslist, id=id)
comment=Comment.objects.all().filter(post_id=id)
if request.method == 'POST':
    form = CommentForm(request.POST)
    if form.is_valid():
        post = form.save(commit=False)
        post.user_id = request.user
        post.message= comment
        post.save()
        return redirect('book_review', id=id)
    else:
        form=CommentForm()
return render(request, "books/book_review.html", {'book':book, 'comment':comment, 'form': form})
  

models.py:

 class Comment(models.Model):
message= models.TextField('Message',null=True)
date_comment=models.DateTimeField(default=now, null=True)
user_id= models.ForeignKey(User, on_delete=models.CASCADE,null=True)
post_id=models.ForeignKey(Bookslist,on_delete=models.CASCADE,null=True)
  

forms.py:

 from django import forms 
from .models import Comment 

class CommentForm(forms.ModelForm):
class Meta:
    model = Comment
    fields = ['message', ]
  

book_review.html:

 {% extends 'books/base.html' %}
{% load static %}

{% block stylesheet %}
<link rel="stylesheet" href="{% static 'accounts/accounts.css' %}">
{% endblock %}

{% block content %}

<div class = "container">
<ul class = "nav nav-tabs" id = "myTab" role = "tablist">
   <li class = "nav-item">
      <a class = "nav-link active" id = "summary-tab" data-toggle = "tab" 
         href = "#summary" role = "tab" aria-controls = "summary" 
         aria-selected = "true">Summary</a>
   </li>
   <li class = "nav-item">
      <a class = "nav-link" id = "characters-tab" data-toggle = "tab" 
         href = "#characters" role = "tab" aria-controls = "characters" 
         aria-selected = "false">Characters</a>
   </li>
   <li class = "nav-item">
      <a class = "nav-link" id = "relatedbooks-tab" data-toggle = "tab" 
         href = "#relatedbooks" role = "tab" aria-controls = "relatedbooks" 
         aria-selected = "false">Related Books</a>
   </li>
</ul>

<div class = "tab-content" id = "myTabContent">
   <div class = "tab-pane fade show active" id = "summary" role = "tabpanel" 
      aria-labelledby = "summary-tab"><br><br>
      {{book.summary}}

    </div>
   
   <div class = "tab-pane fade" id = "characters" role = "tabpanel" 
      aria-labelledby = "characters-tab"><br><br>

      {{book.c1}}<br><br>{{book.c2}}<br><br>{{book.c3}}<br><br>{{book.c4}}<br><br>{{book.c5}}<br><br> 
   {{book.c6}}<br><br>{{book.c7}}<br><br>{{book.c8}}<br><br>{{book.c9}}<br><br>
      {{book.c10}}
     </div>
   
   <div class = "tab-pane fade" id = "relatedbooks" role = "tabpanel" 
      aria-labelledby = "relatedbooks-tab">Content for related books tab</div>
</div>
<br>
<br>
<div class="container">
  <form method="post" class="mb-4">
     {% csrf_token %}
     <div class="form-group">
        <label for="exampleFormControlTextarea1">Leave your comment:</label>
        <textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
      </div>
     <button type="submit" class="btn btn-success">Post</button>
   </form>

{% for com in comment %}
<div class="card mb-2">
  <div class="card-body p-3">
    <div class="row">
      <div class="col-2">
        <img src="{% static 'images/icon2.webp' %}" alt="{{ com.user_id }}" class="w-100">
        <small>Posts: {{ com.count }}</small></div>
        <div class="col-10">
           <div class="row mb-3">
             <div class="col-6">
               <strong class="text-muted">{{ com.user_id }}</strong>
             </div>
             <div class="col-6 text-right">
               <small class="text-muted">{{ com.date_comment }}</small>
             </div>
           </div>
           {{ com.message }}<br><br>
           {% if com.user_id == user %}
               <button type="button" class="btn btn-primary">Reply</button>
           {% endif %}
      
   </div>
</div></div></div></div>
{% endfor %}
</div>
</div>
</div>

<!-- jQuery library -->
<script src = "https://code.jquery.com/jquery-3.2.1.slim.min.js" 
integrity = "sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" 
crossorigin = "anonymous">
</script>

<!-- Popper -->
<script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" 
integrity = "sha384-ApNbgh9B Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" 
crossorigin = "anonymous">
</script>

<!-- Latest compiled and minified Bootstrap JavaScript -->
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" 
integrity = "sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5 76PVCmYl" 
crossorigin="anonymous">
</script>


{% endblock %}
  

Ответ №1:

Вам нужно добавить post_id во вновь созданный комментарий.

Вот так:

 post.post_id = id
  

Также убедитесь, что вы используете правильные имена для своих переменных, которые, я полагаю post , должны быть comment в этом сценарии, исходя из формы CommentForm: model = Comment

Эта замена имела бы смысл для кода:

 if request.method == 'POST':
    form = CommentForm(request.POST)
    if form.is_valid():
        comment = form.save(commit=False)
        comment.user_id = request.user
        comment.message= comment
        comment.post_id = id
        comment.save()