С помощью Google я научился создавать систему комментариев для моего блогового приложения. Но у меня есть несколько других страниц в отдельном приложении, и на всех этих страницах есть какой-то набор инструментов, мне также нужна система комментариев для всех этих страниц. Я изменил свой код приложения блогов следующим образом и получил ошибку.
models.py
class Page(models.Model):
pass #Something more needs to be done here I guess, like some sort of reference to my page
class Comment(models.Model):
page = models.ForeignKey(Page,on_delete=models.CASCADE,related_name='comments')
name = models.CharField(max_length=80)
email = models.EmailField()
body = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
active = models.BooleanField(default=False)
class Meta:
ordering = ['created_on']
def __str__(self):
return 'Comment {} by {}'.format(self.body, self.name)
views.py
from .models import Page
from .forms import CommentForm
from django.shortcuts import render, get_object_or_404
def atool(request):
if request.method == 'POST':
page = get_object_or_404(Page)
comments = page.comments.filter(active=True)
new_comment = None
# Comment posted
if request.method == 'POST':
comment_form = CommentForm(data=request.POST)
if comment_form.is_valid():
new_comment = comment_form.save(commit=False)
new_comment.post = page
new_comment.save()
else:
comment_form = CommentForm()
return render(request, 'atool/atool.html', {'page': page,
'comments': comments,
'new_comment': new_comment,
'comment_form': comment_form})
else:
context= {'somedata': 'data'}
return render(request, 'atool/atool.html', context)
admin.py
from django.contrib import admin
from .models import Comment
@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
list_display = ('name', 'body', 'page', 'created_on', 'active')
list_filter = ('active', 'created_on')
search_fields = ('name', 'email', 'body')
actions = ['approve_comments']
def approve_comments(self, request, queryset):
queryset.update(active=True)
urls.py
urlpatterns = [
path('', views.atool, name='atool'),]
atool. html
<div class="container">
<div class="row">
<div class="col-md-8 card mb-4 mt-3 ">
<div class="card-body">
<!-- comments -->
<h2>{{ comments.count }} comments</h2>
{% for comment in comments %}
<div class="comments" style="padding: 10px;">
<p class="font-weight-bold">
{{ comment.name }}
<span class=" text-muted font-weight-normal">
{{ comment.created_on }}
</span>
</p>
{{ comment.body | linebreaks }}
</div>
{% endfor %}
</div>
</div>
<div class="col-md-8 card mb-4 mt-3 ">
<div class="card-body">
{% if new_comment %}
<div class="alert alert-success" role="alert">
Your comment is awaiting moderation
</div>
{% else %}
<h3>Leave a comment</h3>
<form method="post" style="margin-top: 1.3em;">
{{ comment_form.as_p }}
{% csrf_token %}
<button type="submit" class="btn btn-primary btn-lg">Submit</button>
</form>
{% endif %}
</div>
</div>
</div>
</div>
Выполнение GET для моей страницы даже не загружает форму-comment_form.
При нажатии кнопки отправки появляется следующее отладочное сообщение:
relation "atool_page" does not exist LINE 1: ...ol_page"."id" FROM "atool_comment" INNER JOIN "atool_... ^
Конечно, мне здесь не хватает нескольких вещей. Любая помощь будет принята с благодарностью!