from django.conf import settings
from django.contrib.auth import get_user_model
from django_comments import get_model
from django_comments.models import Comment
from django_comments.views.moderation import perform_flag, perform_approve, perform_delete
from django.utils.translation import ugettext_lazy as _, ungettext

import xadmin
from xadmin.layout import *


class UsernameSearch(object):
    """The User object may not be auth.User, so we need to provide
    a mechanism for issuing the equivalent of a .filter(user__username=...)
    search in CommentAdmin.
    """

    def __str__(self):
        model = get_user_model()
        return 'user__%s' % getattr(model, model.USERNAME_FIELD)


class CommentsAdmin(object):
    form_layout = (
        Main(
            Fieldset(None,
                     'content_type', 'object_pk', 'site',
                     css_class='unsort no_title'
                     ),
            Fieldset('Content',
                     'user', 'user_name', 'user_email', 'user_url', 'comment'
                     ),
        ),
        Side(
            Fieldset(_('Metadata'),
                     'submit_date', 'ip_address', 'is_public', 'is_removed'
                     ),
        )
    )

    list_display = ('name', 'content_type', 'object_pk', 'ip_address', 'submit_date', 'is_public', 'is_removed')
    list_filter = ('submit_date', 'site', 'is_public', 'is_removed')
    ordering = ('-submit_date',)
    search_fields = ('comment', UsernameSearch(), 'user_name', 'user_email', 'user_url', 'ip_address')
    actions = ["flag_comments", "approve_comments", "remove_comments"]
    model_icon = 'fa fa-comment'

    def get_actions(self):
        actions = super(CommentsAdmin, self).get_actions()
        # Only superusers should be able to delete the comments from the DB.
        if not self.user.is_superuser and 'delete_selected' in actions:
            actions.pop('delete_selected')
        if not self.user.has_perm('comments.can_moderate'):
            if 'approve_comments' in actions:
                actions.pop('approve_comments')
            if 'remove_comments' in actions:
                actions.pop('remove_comments')
        return actions

    def flag_comments(self, request, queryset):
        self._bulk_flag(queryset, perform_flag,
                        lambda n: ungettext('flagged', 'flagged', n))

    flag_comments.short_description = _("Flag selected comments")
    flag_comments.icon = 'flag'

    def approve_comments(self, request, queryset):
        self._bulk_flag(queryset, perform_approve,
                        lambda n: ungettext('approved', 'approved', n))

    approve_comments.short_description = _("Approve selected comments")
    approve_comments.icon = 'ok'

    def remove_comments(self, request, queryset):
        self._bulk_flag(queryset, perform_delete,
                        lambda n: ungettext('removed', 'removed', n))

    remove_comments.short_description = _("Remove selected comments")
    remove_comments.icon = 'remove-circle'

    def _bulk_flag(self, queryset, action, done_message):
        """
        Flag, approve, or remove some comments from an admin action. Actually
        calls the `action` argument to perform the heavy lifting.
        """
        n_comments = 0
        for comment in queryset:
            action(self.request, comment)
            n_comments += 1

        msg = ungettext('1 comment was successfully %(action)s.',
                        '%(count)s comments were successfully %(action)s.',
                        n_comments)
        self.message_user(msg % {'count': n_comments, 'action': done_message(n_comments)}, 'success')


# Only register the default admin if the model is the built-in comment model
# (this won't be true if there's a custom comment app).
if 'django_comments' in settings.INSTALLED_APPS and (get_model() is Comment):
    xadmin.site.register(Comment, CommentsAdmin)

@@ -594,41 +594,8 @@
 f):%0A
-        model = get_user_model()%0A
     
@@ -630,20 +630,24 @@
 ttr(
-model, 
+get_user_
 model
+()
 .USE

Fix USERNAME_FIELD.