Посмотрите, например, как у меня сделано: https://github.com/lampslave/blog
Изучаю ваш код. Но у меня есть две проблемы, которые по моему связаны. 1. у меня не отображается поле для ввода коментария, но при нажатии кнопки submit открывается новое окно для ввода коментария. Однако потом вылазит вторая проблема, Если я ввожу коммент, то появляется ошибка, что "blog_comment.post_id may not be NULL"
И так, похоже у меня нет ассоциации комментария с постом. (Через админку комментарии нормально добавляются) Что не так?
вот что вышло:
urls.py:
from django.conf.urls import patterns, url
from blog.views import PostDetailView, PostsListView, CommentCreate
urlpatterns = patterns('',
url(r'^$', PostsListView.as_view(), name='list'), # по ulr https://имя_сайта/blog будет выводиться список постов
url(r'^(?P<pk>\d+)/$', PostDetailView.as_view()), # по ulr https://имя_сайта/blog/число будет выводиться пост с
# опред номером
url(r'^comment/add/$', CommentCreate.as_view(), name='comment_add'),
)
forms.py:
from django.forms import ModelForm
from blog.models import Comment
class CommentForm(ModelForm):
class Meta:
model = Comment
exclude = ['post', 'datetime']
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
def get_absolute_url(self):
return 'comment/add/'
views.py:
from blog.models import Post, Comment
from django.views.generic import ListView, DetailView, CreateView
from blog.forms import CommentForm
class PostsListView(ListView): # as list
model = Post
class PostDetailView(DetailView):
model = Post
template_name = 'blog/post_detail.html'
class CommentCreate(CreateView):
model = Comment
form_class = CommentForm
http_method_names = ['post']
template_name = 'blog/comment_add.html'
comment_add.html:
<div class="comment-form-container">
<form class="comment-form" method="post" action="{% url 'comment_add' %}">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value='Submit'>
</form>
</div>
post_detail.html:
{% extends 'blog/base.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 %}
{% include 'blog/comment_add.html' with form=comment_add %}
{% endblock %}
Updated 20 Jan. 2015, 15:45 by zagrebelsky.o.