Add a complete contact form system with the following changes: - Create ContactMessage model to store form submissions with tracking fields (is_read, is_responded) - Implement ContactMessage admin interface with custom actions, filters, and bulk operations - Add contact endpoint documentation to API root view - Update email configuration to use admin@attunehearttherapy.com as sender address This enables users to submit contact inquiries and allows administrators to track and manage these messages efficiently through the Django admin panel.
56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
from django.contrib import admin
|
|
from .models import CustomUser, UserProfile, ContactMessage
|
|
|
|
@admin.register(CustomUser)
|
|
class UserAdmin(admin.ModelAdmin):
|
|
list_display = ('email', 'first_name', 'last_name', 'is_staff')
|
|
search_fields = ('email', 'first_name', 'last_name')
|
|
ordering = ('email',)
|
|
|
|
|
|
@admin.register(UserProfile)
|
|
class UserProfileAdmin(admin.ModelAdmin):
|
|
list_display = ('user', 'timezone', 'created_at', 'updated_at')
|
|
search_fields = ('user__email', 'user__first_name', 'user__last_name')
|
|
ordering = ('user__email',)
|
|
|
|
|
|
|
|
@admin.register(ContactMessage)
|
|
class ContactMessageAdmin(admin.ModelAdmin):
|
|
list_display = ['name', 'email', 'phone', 'created_at', 'is_read', 'is_responded']
|
|
list_filter = ['is_read', 'is_responded', 'created_at']
|
|
search_fields = ['name', 'email', 'phone', 'message']
|
|
readonly_fields = ['created_at']
|
|
date_hierarchy = 'created_at'
|
|
|
|
fieldsets = (
|
|
('Contact Information', {
|
|
'fields': ('name', 'email', 'phone')
|
|
}),
|
|
('Message', {
|
|
'fields': ('message',)
|
|
}),
|
|
('Status', {
|
|
'fields': ('is_read', 'is_responded', 'created_at')
|
|
}),
|
|
)
|
|
|
|
def get_queryset(self, request):
|
|
qs = super().get_queryset(request)
|
|
return qs.select_related()
|
|
|
|
actions = ['mark_as_read', 'mark_as_responded']
|
|
|
|
def mark_as_read(self, request, queryset):
|
|
updated = queryset.update(is_read=True)
|
|
self.message_user(request, f'{updated} message(s) marked as read.')
|
|
mark_as_read.short_description = "Mark selected as read"
|
|
|
|
def mark_as_responded(self, request, queryset):
|
|
updated = queryset.update(is_responded=True)
|
|
self.message_user(request, f'{updated} message(s) marked as responded.')
|
|
mark_as_responded.short_description = "Mark selected as responded"
|
|
|
|
|