Я делаю пост-комментарий веб-приложение. На главной странице отображаются различные сообщения и кнопка «Ответить / Комментировать». Когда я нажал на нее, мне нужно показать содержимое сообщения, на которое он отвечает, вместе с формой комментариев. Посты и комментарии являются отдельными моделями.
До сих пор я просматривал в Интернете методы отображения двух отдельных моделей на одной странице. Но здесь мне нужно визуализировать содержимое публикации, используя «GET», это pk и форма для отправки комментария, которая является методом «POST».
Это мои models.py:
class Post(models.Model):
pid = models.AutoField(primary_key=True)
title = models.CharField(max_length=1000)
content = RichTextUploadingField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('blog-home')#, kwargs={'pk':self.pk})
class Comment(models.Model):
cid = models.AutoField(primary_key=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
answer = RichTextUploadingField()
comment_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.answer
def get_absolute_url(self):
return reverse('blog-home')
def save(self, *args, **kwargs):
super(Comment, self).save(*args, **kwargs)
Мой views.py выглядит примерно так:
class PostDetailView(DetailView):
model = Post
class CommentCreateView(LoginRequiredMixin, CreateView):
model = Comment
fields = ['answer']
def form_valid(self, form, **kwargs):
form.instance.author = self.request.user
form.instance.post_id = self.kwargs['pk']
return super().form_valid(form)
Два URL-адреса - один для подробного просмотра поста и для просмотра создания комментария, как показано ниже:
path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
path('post/<int:pk>/comment/', CommentCreateView.as_view(), name='comment-create')
Шаблон для comment_form приведен ниже:
% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block extrahead %}
<script>window.CKEDITOR_BASEPATH = '/static/ckeditor/ckeditor/';</script>
{{ block.super }}
{% block detail %}
{% include "blog/post_detail.html" with pid="object.post_id" %}
{% endblock %}
{% block answer %}
<div class="content-section">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">
Answer</legend>
{{form.media}}
{{form|crispy}}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info", type="submit">Submit
</button>
</div>
</form>
</div>
{% endblock %}
{% endblock %}
При нажатии на кнопку ответа я ожидаю, что оба вышеперечисленных URL-адреса запустятся и отобразят страницу пост-детализации в верхней половине, а представление комментария - в нижней половине одной страницы. Любое руководство высоко ценится.