Добрый день!
Не работает модерация в комментариях, все делал по официальному мануалу, но видимо, как часто бывает, что то там не написали важного.
Что имеем:
Стандартные комментарии Django с кастомизацией "my_comment":
1) Файл __init__
:
from my_comment.models import CommentWithReiting
from my_comment.forms import CommentFormWithReiting
def get_model():
return CommentWithReiting
def get_form():
return CommentFormWithReiting
2) Файл models.py
:
from django.db import models
from django.contrib.comments.models import Comment
from django.contrib.comments.moderation import CommentModerator, moderator
from base_app.models import Stihi, Izdelie
from blog.models import Post
REIT_CH = (
(u'0', u'Без оценки'),
(u'1', u'1'),
(u'2', u'2'),
(u'3', u'3'),
(u'4', u'4'),
(u'5', u'5'),
)
class CommentWithReiting(Comment):
reiting = models.CharField(max_length=12, choices=REIT_CH, verbose_name=u'Ваша оценка')
class Meta:
verbose_name = u'Комментарий'
verbose_name_plural = u'Комментарии'
class AllModerator(CommentModerator):
email_notification = True
def moderate(self, comment, content_object, request):
return super(AllModerator, self).moderate(comment, content_object, request)
class PostModerator(AllModerator):
enable_field = 'enable_comments'
moderator.register(Post, PostModerator)
moderator.register(Stihi, AllModerator)
moderator.register(Izdelie, AllModerator)
3) Файл forms.py
from django import forms
from django.contrib.comments.forms import CommentForm
from my_comment.models import CommentWithReiting, REIT_CH
class CommentFormWithReiting(CommentForm):
reiting = forms.ChoiceField(choices=REIT_CH, label=u'Ваша оценка')
def __init__(self, *args, **kwargs):
super(CommentFormWithReiting, self).__init__(*args, **kwargs)
self.fields['email'].widget.attrs.update({'class': 'color_text'})
self.fields['name'].widget.attrs.update({'class': 'color_text'})
self.fields['comment'].widget.attrs.update({'class': 'order_text_area'})
self.fields['reiting'].widget.attrs.update({'class': 'color_text'})
def get_comment_model(self):
# Use our custom comment model instead of the built-in one.
return CommentWithReiting
def get_comment_create_data(self):
# Use the data of the superclass, and add in the title field
data = super(CommentFormWithReiting, self).get_comment_create_data()
data['reiting'] = self.cleaned_data['reiting']
return data
4) Файл views.py
:
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.shortcuts import get_object_or_404
from django.http import Http404
from base_app.models import Izdelie, Stihi
from blog.models import Post
def my_comment_list(request, izdel, id_num):
"""
Страница с комментариями
"""
id_num = int(id_num)
request.session['glavmenu'] = 'none'
if izdel=='Izdelie':
element = Izdelie
elif izdel=='Stihi':
element = Stihi
elif izdel == 'Post':
element = Post
else:
raise Http404
element = get_object_or_404(element, pk=id_num)
return render_to_response('comments/list.html', {'element': element}, context_instance=RequestContext(request))
Что имеем: комментарии работают как нужно, все добавляется и показывается.
Что не имеем: нет модерации от слова совсем, регистрация проходит, а весь остальной код не исполняется - нет уведомлений по почте, все показывается сразу. Носом чую, что ошибка дурацкая - что то не указал, где то что то недоописал. Гугл ничего не подсказывает :(.
Updated 4 May 2014, 10:34 by Vitaly00.