Как визуализировать две отдельные модели на одной странице? - PullRequest
0 голосов
/ 09 июля 2019

Я делаю пост-комментарий веб-приложение. На главной странице отображаются различные сообщения и кнопка «Ответить / Комментировать». Когда я нажал на нее, мне нужно показать содержимое сообщения, на которое он отвечает, вместе с формой комментариев. Посты и комментарии являются отдельными моделями.

До сих пор я просматривал в Интернете методы отображения двух отдельных моделей на одной странице. Но здесь мне нужно визуализировать содержимое публикации, используя «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-адреса запустятся и отобразят страницу пост-детализации в верхней половине, а представление комментария - в нижней половине одной страницы. Любое руководство высоко ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...