Как автоматически принимать комментарии от аутентифицированных пользователей в django.contrib.comments - PullRequest
2 голосов
/ 31 марта 2010

Есть ли способ заставить Django автоматически установить для поля is_public комментария значение True.

Я разрешаю комментарии только зарегистрированным пользователям и хотел бы пропустить просмотр комментариев вручную.

Ответы [ 4 ]

1 голос
/ 31 марта 2010

Встроенная форма комментариев уже должна устанавливать для каждого комментария значение is_public = True. См CommentDetailsForm.get_comment_create_data в http://code.djangoproject.com/browser/django/trunk/django/contrib/comments/forms.py

Если вы хотите изменить это для вошедших в систему и не вошедших в систему пользователей, взгляните на встроенную документацию для модерации комментариев: http://docs.djangoproject.com/en/1.1/ref/contrib/comments/moderation/#ref-contrib-comments-moderation

Вы можете написать собственного модератора, который проверяет комментарий, чтобы увидеть, установлен ли comment.user и не является ли он модерирующим (is_public = True), в противном случае установите is_public = False.

0 голосов
/ 19 октября 2010

Переопределение moderate CommentModerator работает для меня:

from django.contrib.comments.moderation import CommentModerator

class EntryModerator(CommentModerator):
    # [...]

    def moderate(self, comment, content_object, request):
        # If the user who commented is a staff member, don't moderate
        if comment.user and comment.user.is_staff:
            return False
        else:
            return True
0 голосов
/ 09 августа 2010

ОК, если кто-то ищет ответ на этот вопрос, я решил его так:

# in models.py:
import datetime
def moderate_comment(sender, instance, **kwargs):
    if not instance.id:
        instance.is_public = True
from django.contrib.comments.models import Comment
from django.db.models import signals

signals.pre_save.connect(moderate_comment, sender=Comment)
0 голосов
/ 31 марта 2010

перезаписать метод сохранения в форме комментариев и установить для is_public значение True

...