Pergunta

Estou tendo problemas para customizar o framework de comentários do Django.Preciso adicionar um campo 'empresa'.Eu segui a documentação e realmente não cheguei a lugar nenhum.Não está longe de funcionar porque quando adiciono COMMENTS_APP = 'comments_app' ao meu settings.py, o aplicativo 'comments' desaparece da interface de administração.Quando tento escrever um comentário aparece o campo da empresa onde pede seu e-mail, url etc.

Gostaria de poder visualizar todos os comentários no painel de administração junto com o campo da empresa que adicionei.

Preciso criar um admin.py ou simplesmente falta alguma coisa?

Aqui está meu código para meu aplicativo de comentários personalizados:

//MODELOS

 from django.db import models
    from django.contrib.comments.models import Comment

    class CommentWithAddedFields(Comment):
        company = models.CharField(max_length=300)

//FORMS.py

from django import forms
from django.contrib.comments.forms import CommentForm
from comments_app.models import CommentWithAddedFields

class CommentFormWithAddedFields(CommentForm):
    company = forms.CharField(max_length=300)


    def get_comment_model(self):

        return CommentWithAddedFields


    def get_comment_create_data(self):

        data = super(CommentFormWithAddedFields, self).get_comment_create_data()
        data['company'] = self.cleaned_data['company']
        return data

//__init.py

from comments_app.models import CommentWithAddedFields
from comments_app.forms import CommentFormWithAddedFields

def get_model():
    return CommentWithAddedFields


def get_form():
    return CommentFormWithAddedFields

Adicionei o aplicativo no meu arquivo settings.py e adicionei COMMENTS_APP = 'comments_app' como mencionei acima.

Perdi alguma coisa?

Obrigado

Foi útil?

Solução

Sim, você precisa criar um admin.py para seu aplicativo de comentários personalizados se você quiser que seu modelo apareça no django admin.Você deve ser capaz de subclassificar o CommentsAdmin, e personalize conforme necessário.

from django.contrib import admin
from django.utils.translation import ugettext_lazy as _, ungettext
from django.contrib.comments.admin import CommentsAdmin
from django.contrib.comments import get_model

from comments_app.models import CommentWithAddedFields

class MyCommentsAdmin(CommentsAdmin):
    # Same fieldsets as parent admin, but include 'company'
    fieldsets = (
        (None,
           {'fields': ('content_type', 'object_pk', 'site')}
        ),
        (_('Content'),
           {'fields': ('user', 'user_name', 'user_email', 'user_url', 'company', 'comment')}
        ),
        (_('Metadata'),
           {'fields': ('submit_date', 'ip_address', 'is_public', 'is_removed')}
        ),
     )

# Only register the admin if the comments model is CommentWithAddedFields
# The equivalent section in django.contrib.comments.admin is what prevents 
# the admin from being registered when you set COMMENTS_APP = 'comments_app' 
# in your settings file
if get_model() is CommentWithAddedFields:
    admin.site.register(CommentWithAddedFields, MyCommentsAdmin)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top