@Abdus

Как добавить возможность комментировать пост блога используя cbv?

Учу django, пишу блог.
Хочу добавить возможность писать комментарии к постам, но ни как не выходит создать поле для ввода в шаблоне. Куда вообще копать? Единственное что близкое нашел это использовать get_context_data. Но не уверен, что для форм это подойдет.

forms.py:
from django import forms

from blog.models import Comment

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        exclude = ['post', 'datetime']

views.py:
from blog.models import Post
from django.views.generic import ListView, DetailView
from blog.forms import CommentForm

class PostsListView(ListView): # as list
    model = Post

class PostDetailView(DetailView):
    model = Post


models.py:
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=255) # title of post
    datetime = models.DateTimeField(u'Дата публикации') # date of post
    content = models.TextField(max_length=10000) # text of post
    
    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return '%i/' % self.id

class Comment(models.Model):
    text = models.CharField(max_length=1000)
    post = models.ForeignKey(Post)
    datetime = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.text


post_detail.html:
{%  block content %}
    <h2>{{ post.title }}</h2>
    <p>{{ post.datetime }}</p>
    <p>{{ post.content }}</p>
{% endblock %}

{% block comment %}
    <h4>Comments</h4>
    {% for comment in post.comment_set.all %}
        <p>{{ comment.datetime }}</p>
        <p>{{ comment.text }}</p>

    {% endfor %}

<form action='' method='post'>
    {{ comment.text.as_p }}
<input type='submit' value='Submit' />
</form>
{% endblock %}


появилось поле ввода, но данные не сохраняются. Что-то не так делаю
views.py:
from blog.models import Post
from django.views.generic import ListView, DetailView
from blog.forms import CommentForm

class PostsListView(ListView): # as list
    model = Post

class PostDetailView(DetailView):
    model = Post

    def get_context_data(self, *args, **kwargs):
        context = super(PostDetailView, self).get_context_data(**kwargs)
        context['comment'] = CommentForm()
        return context
  • Вопрос задан
  • 3207 просмотров
Пригласить эксперта
Ответы на вопрос 1
@FireGM
Всё нормально, через контекст передавать форму. Главное эту форму должна другая вьюха анализировать и потом редирект на пост, в котором появился новый комментарий..
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы