You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.5 KiB

6 months ago
from django.contrib import admin
from django.utils.html import format_html
from django.db.models import Avg
from .models import Survey
@admin.register(Survey)
class SurveyAdmin(admin.ModelAdmin):
# List display configuration
list_display = (
'user',
'created_at',
'water_usage',
'daily_consumption_awareness',
'get_consciousness_score',
'get_survey_status'
)
# Filtering options
list_filter = (
'created_at',
'water_usage',
'daily_consumption_awareness',
'fix_leaks',
'water_saving_appliances'
)
# Search configuration
search_fields = (
'user__username',
'user__email',
'biggest_cause_of_wastage',
'resources_needed'
)
# Fields to display in detail view, grouped by category
fieldsets = (
('User Information', {
'fields': ('user',)
}),
('General Awareness', {
'fields': (
'water_usage',
'daily_consumption_awareness',
'dripping_tap_wastage'
)
}),
('Personal Habits', {
'fields': (
'brushing_habits',
'fix_leaks',
'reuse_water',
'water_saving_appliances'
)
}),
('Feedback and Suggestions', {
'fields': (
'biggest_cause_of_wastage',
'resources_needed',
'additional_suggestions'
),
'classes': ('collapse',) # Makes this section collapsible
}),
('Metadata', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
})
)
# Read-only fields
readonly_fields = ('created_at', 'updated_at')
# Date hierarchy for drilling down
date_hierarchy = 'created_at'
# Ordering
ordering = ('-created_at',)
def get_consciousness_score(self, obj):
"""Display water consciousness score"""
return f"{obj.get_water_consciousness_score()}%"
get_consciousness_score.short_description = 'Consciousness Score'
def get_survey_status(self, obj):
"""Display survey status based on consciousness score"""
score = obj.get_water_consciousness_score()
if score >= 75:
return 'Excellent'
elif score >= 50:
return 'Good'
else:
return 'Needs Improvement'
get_survey_status.short_description = 'Status'