NDOJ/judge/admin/comments.py

85 lines
2.5 KiB
Python
Raw Permalink Normal View History

2020-01-21 06:35:58 +00:00
from django.forms import ModelForm
from django.urls import reverse_lazy
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _, ungettext
from reversion.admin import VersionAdmin
from judge.models import Comment
from judge.widgets import AdminHeavySelect2Widget, HeavyPreviewAdminPageDownWidget
class CommentForm(ModelForm):
class Meta:
widgets = {
2022-05-14 17:57:27 +00:00
"author": AdminHeavySelect2Widget(data_view="profile_select2"),
"parent": AdminHeavySelect2Widget(data_view="comment_select2"),
2020-01-21 06:35:58 +00:00
}
if HeavyPreviewAdminPageDownWidget is not None:
2022-05-14 17:57:27 +00:00
widgets["body"] = HeavyPreviewAdminPageDownWidget(
preview=reverse_lazy("comment_preview")
)
2020-01-21 06:35:58 +00:00
class CommentAdmin(VersionAdmin):
fieldsets = (
(
None,
{
"fields": (
"author",
"parent",
"score",
"hidden",
"content_type",
"object_id",
)
},
),
2022-05-14 17:57:27 +00:00
("Content", {"fields": ("body",)}),
2020-01-21 06:35:58 +00:00
)
list_display = ["author", "linked_object", "time"]
search_fields = ["author__user__username", "body"]
2022-05-14 17:57:27 +00:00
readonly_fields = ["score"]
actions = ["hide_comment", "unhide_comment"]
list_filter = ["hidden"]
2020-01-21 06:35:58 +00:00
actions_on_top = True
actions_on_bottom = True
form = CommentForm
2022-05-14 17:57:27 +00:00
date_hierarchy = "time"
2020-01-21 06:35:58 +00:00
def get_queryset(self, request):
2022-05-14 17:57:27 +00:00
return Comment.objects.order_by("-time")
2020-01-21 06:35:58 +00:00
def hide_comment(self, request, queryset):
count = queryset.update(hidden=True)
2022-05-14 17:57:27 +00:00
self.message_user(
request,
ungettext(
"%d comment successfully hidden.",
"%d comments successfully hidden.",
count,
)
% count,
)
hide_comment.short_description = _("Hide comments")
2020-01-21 06:35:58 +00:00
def unhide_comment(self, request, queryset):
count = queryset.update(hidden=False)
2022-05-14 17:57:27 +00:00
self.message_user(
request,
ungettext(
"%d comment successfully unhidden.",
"%d comments successfully unhidden.",
count,
)
% count,
)
unhide_comment.short_description = _("Unhide comments")
2020-01-21 06:35:58 +00:00
def save_model(self, request, obj, form, change):
super(CommentAdmin, self).save_model(request, obj, form, change)
if obj.hidden:
obj.get_descendants().update(hidden=obj.hidden)