Atualizando o sistema de comentários anterior do Django

Versões anteriores do Django incluíam um sistema de comentários defasado e não documentado. Usuários que usaram engenharia reversa nesse framework precisarão atualizá-lo para usar o novo sistema; este guia explica como.

As principais mudanças são:

  • Este novo sistema é documentado.

  • Ele usa funcionalidades modernas do Django como o forms e modelforms.

  • Ele tem um único model Comment ao invés de ter separados os modelos FreeComment e Comment.

  • Comentários têm campos “email” e “URL”.

  • Sem ratings, fotos e karma. Isso só deve afetar o Mundo Online.

  • A tag {% comment_form %} não existe mais. Em seu lugar, agora tem duas novas funções: {% get_comment_form %}, que retorna um formulário para postar um novo comentário, e {% render_comment_form %}, que renderiza um dado formulário utilizando o template comments/form.html.

  • A forma que os comentários são incluídos na URLconf mudaram; você vai precisar substituir:

    (r'^comments/', include('django.contrib.comments.urls.comments')),
    

    com:

    (r'^comments/', include('django.contrib.comments.urls')),
    

Atualizando dados

Os models do sistema de comentários do Django mudou, bem como os nomes das tabelas. Antes de você tranfer seus dados para o novo sistema de comentários, esteja certo de que instalou o novo sistema de comentários como explicado em guia rápido de início.

Para transferir seus dados para o novo sistema de comentários, você precisará rodar diretamente o seguinte SQL:

BEGIN;

INSERT INTO django_comments
    (content_type_id, object_pk, site_id, user_name, user_email, user_url,
    comment, submit_date, ip_address, is_public, is_removed)
SELECT
    content_type_id, object_id, site_id, person_name, '', '', comment,
    submit_date, ip_address, is_public, not approved
FROM comments_freecomment;

INSERT INTO django_comments
    (content_type_id, object_pk, site_id, user_id, user_name, user_email,
    user_url, comment, submit_date, ip_address, is_public, is_removed)
SELECT
    content_type_id, object_id, site_id, user_id, '', '', '', comment,
    submit_date, ip_address, is_public, is_removed
FROM comments_comment;

UPDATE django_comments SET user_name = (
    SELECT username FROM auth_user
    WHERE django_comments.user_id = auth_user.id
) WHERE django_comments.user_id is not NULL;
UPDATE django_comments SET user_email = (
    SELECT email FROM auth_user
    WHERE django_comments.user_id = auth_user.id
) WHERE django_comments.user_id is not NULL;

COMMIT;