rinogeek's picture
Update for deployment
683617f
"""
Configuration de l'administration Django pour les datasets
Created by BlackBenAI Team - AfriDataHub Platform
"""
from django.contrib import admin
from django.utils.html import format_html
from .models import Dataset, DataPoint, Alert
@admin.register(Dataset)
class DatasetAdmin(admin.ModelAdmin):
"""Administration des datasets"""
list_display = [
'title', 'domain', 'source_name', 'status',
'data_points_count', 'last_updated', 'is_public'
]
list_filter = ['domain', 'status', 'is_public', 'created_at', 'last_updated']
search_fields = ['title', 'description', 'source_name']
readonly_fields = ['created_at', 'last_updated', 'data_points_count', 'latest_data_date']
fieldsets = (
('Informations générales', {
'fields': ('title', 'description', 'domain')
}),
('Source', {
'fields': ('source_name', 'source_url')
}),
('Configuration', {
'fields': ('status', 'update_frequency', 'is_public', 'created_by')
}),
('Métadonnées', {
'fields': ('created_at', 'last_updated', 'data_points_count', 'latest_data_date'),
'classes': ('collapse',)
}),
)
def save_model(self, request, obj, form, change):
"""Définit l'utilisateur créateur lors de la création"""
if not change: # Nouveau dataset
obj.created_by = request.user
super().save_model(request, obj, form, change)
@admin.register(DataPoint)
class DataPointAdmin(admin.ModelAdmin):
"""Administration des points de données"""
list_display = [
'dataset', 'country_name', 'value', 'unit', 'date', 'created_at'
]
list_filter = ['dataset', 'country', 'date', 'created_at']
search_fields = ['dataset__title', 'country']
readonly_fields = ['created_at', 'updated_at']
fieldsets = (
('Données', {
'fields': ('dataset', 'country', 'value', 'unit', 'date')
}),
('Informations supplémentaires', {
'fields': ('extra_info',),
'classes': ('collapse',)
}),
('Métadonnées', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(Alert)
class AlertAdmin(admin.ModelAdmin):
"""Administration des alertes"""
list_display = [
'title', 'dataset', 'country_name', 'alert_type',
'severity_badge', 'is_active', 'created_at'
]
list_filter = ['alert_type', 'severity', 'is_active', 'created_at']
search_fields = ['title', 'message', 'dataset__title']
readonly_fields = ['created_at']
fieldsets = (
('Alerte', {
'fields': ('title', 'message', 'dataset', 'country')
}),
('Configuration', {
'fields': ('alert_type', 'severity', 'is_active')
}),
('Valeurs', {
'fields': ('threshold_value', 'current_value'),
'classes': ('collapse',)
}),
('Métadonnées', {
'fields': ('created_at', 'resolved_at'),
'classes': ('collapse',)
}),
)
def severity_badge(self, obj):
"""Affiche un badge coloré pour la sévérité"""
colors = {
'low': '#28a745', # Vert
'medium': '#ffc107', # Jaune
'high': '#fd7e14', # Orange
'critical': '#dc3545' # Rouge
}
color = colors.get(obj.severity, '#6c757d')
return format_html(
'<span style="background-color: {}; color: white; padding: 2px 8px; '
'border-radius: 3px; font-size: 11px;">{}</span>',
color, obj.get_severity_display()
)
severity_badge.short_description = 'Sévérité'
def country_name(self, obj):
"""Affiche le nom complet du pays"""
return obj.get_country_display() if obj.country else '-'
country_name.short_description = 'Pays'
# Configuration globale de l'admin
admin.site.site_header = "AfriDataHub Administration"
admin.site.site_title = "AfriDataHub Admin"
admin.site.index_title = "Bienvenue dans l'administration AfriDataHub"