from django.contrib import admin from django.shortcuts import resolve_url from django.utils import timezone from django.utils.translation import gettext_lazy as _ from django.utils import formats from .models import Ticket, TicketMessage, TicketNotifyAddress def close_tickets(modeladmin, request, queryset): queryset.update(is_open=False, closed=timezone.now()) close_tickets.short_description = _("Close selected tickets") class TicketMessageAdmin(admin.StackedInline): model = TicketMessage fields = ('user_link', 'remote_addr', 'created', 'staff_only', 'message') readonly_fields = ('user_link', 'created') extra = 1 def user_link(self, object): change_url = resolve_url('admin:auth_user_change', object.user.id) return '%s' % (change_url, object.user.username) user_link.allow_tags = True user_link.short_description = 'User' class TicketAdmin(admin.ModelAdmin): fields = ('category', 'subject', 'user_link', 'created', 'status', 'closed') readonly_fields = ('user_link', 'created', 'status', 'closed') list_display = ('subject', 'user', 'created', 'category', 'is_open') list_filter = ('category', 'is_open') search_fields = ('subject', 'user__username', 'message_set__message') actions = (close_tickets,) inlines = (TicketMessageAdmin,) def user_link(self, object): change_url = resolve_url('admin:auth_user_change', object.user.id) return '%s' % (change_url, object.user.username) user_link.allow_tags = True user_link.short_description = 'User' def comment_head(self, object): return object.comment_head comment_head.short_description = _("Comment") def status(self, object): if object.is_open and object.closed: return _("Re-opened") elif object.is_open: return _("Open") else: return _("Closed") def save_model(self, request, obj, form, change): if not change: obj.user = request.user obj.save() def save_formset(self, request, form, formset, change): formset.save() if not change: for f in formset.forms: obj = f.instance obj.user = request.user obj.save() class TicketNotifyAddressAdmin(admin.ModelAdmin): list_display = ('category', 'address') list_filter = ('category', ) search_fields = ('address', ) admin.site.register(Ticket, TicketAdmin) admin.site.register(TicketNotifyAddress, TicketNotifyAddressAdmin)