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
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'
|