2

djangoコメントフレームワークのカスタマイズに問題があります。'company'フィールドを追加する必要があります。私はドキュメントに従いましたが、実際にはどこにも行きません。COMMENTS_APP ='comments_app'をsettings.pyに追加すると、'comments'アプリが管理インターフェースから消えるので、動作するのはそう遠くありません。コメントを書こうとすると、メールやURLなどを尋ねる会社のフィールドが表示されます。

追加した会社のフィールドとともに、管理パネルのすべてのコメントを表示できるようにしたいと思います。

admin.pyを作成する必要がありますか、それとも何か足りないものがありますか?

カスタマイズしたコメントアプリのコードは次のとおりです。

//モデル

 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

上記のように、settings.pyファイルにアプリを追加し、COMMENTS_APP='comments_app'を追加しました。

私は何かを逃しましたか?

ありがとう

4

1 に答える 1

1

admin.pyはい、モデルをdjango adminに表示する場合は、カスタムコメントアプリ用にを作成する必要があります。CommentsAdminをサブクラス化し、必要に応じてカスタマイズできるはずです。

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)
于 2012-10-02T11:59:41.580 に答える