Add recipient notification detail and filtering, a queued admin composer, and contextual automatic titles. Retire email delivery, obsolete auth routes, newsletter data, and related templates and settings.
73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
from django import forms
|
|
from django.contrib import admin
|
|
from django.utils import timezone
|
|
|
|
from simplemde.widgets import SimpleMDEEditor
|
|
from import_export.admin import ImportExportModelAdmin
|
|
|
|
from core.admin import SoftDeleteListFilter, BaseModelAdmin
|
|
from apps.communications.models import Announcement, PushNotificationDevice
|
|
|
|
|
|
class AnnouncementAdminForm(forms.ModelForm):
|
|
content = forms.CharField(
|
|
widget=SimpleMDEEditor(),
|
|
help_text="Announcement content in Markdown format with live preview"
|
|
)
|
|
|
|
class Meta:
|
|
model = Announcement
|
|
fields = '__all__'
|
|
|
|
|
|
@admin.register(Announcement)
|
|
class AnnouncementAdmin(BaseModelAdmin, ImportExportModelAdmin):
|
|
form = AnnouncementAdminForm
|
|
list_display = [
|
|
'title', 'announcement_type', 'priority', 'author',
|
|
'is_published', 'publish_date', 'created_at'
|
|
]
|
|
list_filter = [
|
|
'announcement_type', 'priority', 'is_published',
|
|
SoftDeleteListFilter, 'created_at'
|
|
]
|
|
search_fields = ['title', 'content', 'author__username']
|
|
readonly_fields = ['created_at', 'updated_at']
|
|
|
|
fieldsets = (
|
|
('Content', {
|
|
'fields': ('title', 'content', 'author')
|
|
}),
|
|
('Settings', {
|
|
'fields': ('announcement_type', 'priority', 'is_published', 'publish_date')
|
|
}),
|
|
('Timestamps', {
|
|
'fields': ('created_at', 'updated_at'),
|
|
'classes': ('collapse',)
|
|
}),
|
|
)
|
|
|
|
actions = BaseModelAdmin.actions + ['publish_announcements']
|
|
|
|
def publish_announcements(self, request, queryset):
|
|
queryset.update(is_published=True, publish_date=timezone.now())
|
|
self.message_user(request, f"{queryset.count()} announcements published.")
|
|
publish_announcements.short_description = "Publish selected announcements"
|
|
|
|
@admin.register(PushNotificationDevice)
|
|
class PushNotificationDeviceAdmin(BaseModelAdmin, ImportExportModelAdmin):
|
|
list_display = ['user', 'device_type', 'is_active', 'created_at']
|
|
list_filter = ['device_type', 'is_active', SoftDeleteListFilter, 'created_at']
|
|
search_fields = ['user__username', 'user__email', 'device_token']
|
|
readonly_fields = ['created_at', 'updated_at']
|
|
|
|
fieldsets = (
|
|
('Device', {
|
|
'fields': ('user', 'device_token', 'device_type', 'is_active')
|
|
}),
|
|
('Timestamps', {
|
|
'fields': ('created_at', 'updated_at'),
|
|
'classes': ('collapse',)
|
|
}),
|
|
)
|