2

我在自定义 django 评论框架时遇到问题。我需要添加一个“公司”字段。我已经按照文档进行操作,但并没有真正到达任何地方。它离工作不远,因为当我将 COMMENTS_APP = 'comments_app' 添加到我的 settings.py 时,'comments' 应用程序会从管理界面消失。当我尝试写评论时,它会出现公司字段,它会在其中询问您的电子邮件、网址等。

我希望能够查看管理面板中的所有评论以及我添加的公司字段。

我需要创建一个 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 管理员中,您需要为您的自定义评论应用程序创建一个。您应该能够继承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 回答