94 lines
2.9 KiB
Python
94 lines
2.9 KiB
Python
"""
|
|
Django admin configuration for Website Analyzer models.
|
|
"""
|
|
|
|
from django.contrib import admin
|
|
from .models import Website, Scan, Issue, Metric
|
|
|
|
|
|
@admin.register(Website)
|
|
class WebsiteAdmin(admin.ModelAdmin):
|
|
list_display = ('url', 'domain', 'created_at', 'last_scanned_at')
|
|
list_filter = ('created_at', 'last_scanned_at')
|
|
search_fields = ('url', 'domain')
|
|
readonly_fields = ('id', 'created_at', 'domain')
|
|
ordering = ('-created_at',)
|
|
|
|
|
|
class IssueInline(admin.TabularInline):
|
|
model = Issue
|
|
extra = 0
|
|
readonly_fields = ('id', 'category', 'severity', 'tool', 'title', 'created_at')
|
|
can_delete = False
|
|
show_change_link = True
|
|
max_num = 10
|
|
|
|
|
|
class MetricInline(admin.TabularInline):
|
|
model = Metric
|
|
extra = 0
|
|
readonly_fields = ('id', 'name', 'display_name', 'value', 'unit', 'source', 'score')
|
|
can_delete = False
|
|
max_num = 15
|
|
|
|
|
|
@admin.register(Scan)
|
|
class ScanAdmin(admin.ModelAdmin):
|
|
list_display = (
|
|
'id', 'website', 'status', 'overall_score',
|
|
'performance_score', 'security_score', 'created_at'
|
|
)
|
|
list_filter = ('status', 'created_at')
|
|
search_fields = ('website__url', 'website__domain')
|
|
readonly_fields = (
|
|
'id', 'created_at', 'started_at', 'completed_at',
|
|
'celery_task_id', 'raw_lighthouse_data', 'raw_zap_data',
|
|
'raw_playwright_data', 'raw_headers_data'
|
|
)
|
|
inlines = [IssueInline, MetricInline]
|
|
ordering = ('-created_at',)
|
|
|
|
fieldsets = (
|
|
('Basic Info', {
|
|
'fields': ('id', 'website', 'status', 'celery_task_id')
|
|
}),
|
|
('Timestamps', {
|
|
'fields': ('created_at', 'started_at', 'completed_at')
|
|
}),
|
|
('Scores', {
|
|
'fields': (
|
|
'overall_score', 'performance_score', 'accessibility_score',
|
|
'seo_score', 'best_practices_score', 'security_score'
|
|
)
|
|
}),
|
|
('Errors', {
|
|
'fields': ('error_message',),
|
|
'classes': ('collapse',)
|
|
}),
|
|
('Raw Data', {
|
|
'fields': (
|
|
'raw_lighthouse_data', 'raw_zap_data',
|
|
'raw_playwright_data', 'raw_headers_data'
|
|
),
|
|
'classes': ('collapse',)
|
|
}),
|
|
)
|
|
|
|
|
|
@admin.register(Issue)
|
|
class IssueAdmin(admin.ModelAdmin):
|
|
list_display = ('title', 'scan', 'category', 'severity', 'tool', 'created_at')
|
|
list_filter = ('category', 'severity', 'tool', 'created_at')
|
|
search_fields = ('title', 'description', 'scan__website__url')
|
|
readonly_fields = ('id', 'created_at', 'raw_data')
|
|
ordering = ('severity', '-created_at')
|
|
|
|
|
|
@admin.register(Metric)
|
|
class MetricAdmin(admin.ModelAdmin):
|
|
list_display = ('display_name', 'scan', 'value', 'unit', 'source', 'score')
|
|
list_filter = ('source', 'unit')
|
|
search_fields = ('name', 'display_name', 'scan__website__url')
|
|
readonly_fields = ('id', 'created_at')
|
|
ordering = ('name',)
|