Как сделать поле для комментариев в Django для одной страницы, а не для коллекции блогов - PullRequest
0 голосов
/ 05 апреля 2020

С помощью 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_... ^

Конечно, мне здесь не хватает нескольких вещей. Любая помощь будет принята с благодарностью!

...