from django.contrib import admin from django.utils.html import format_html from .models import AgentCategory, Agent, AgentExecution @admin.register(AgentCategory) class AgentCategoryAdmin(admin.ModelAdmin): list_display = ('name', 'slug', 'agent_count', 'is_active', 'sort_order', 'created_at') list_filter = ('is_active', 'created_at') search_fields = ('name', 'description') prepopulated_fields = {'slug': ('name',)} ordering = ('sort_order', 'name') def agent_count(self, obj): return obj.agents.filter(is_active=True).count() agent_count.short_description = 'Active Agents' @admin.register(Agent) class AgentAdmin(admin.ModelAdmin): list_display = ('name', 'category', 'price', 'usage_count', 'is_active', 'is_featured', 'created_at') list_filter = ('category', 'is_active', 'is_featured', 'created_at') search_fields = ('name', 'description', 'short_description') prepopulated_fields = {'slug': ('name',)} ordering = ('-is_featured', '-usage_count', 'name') fieldsets = ( ('Basic Information', { 'fields': ('name', 'slug', 'category', 'price', 'icon') }), ('Descriptions', { 'fields': ('short_description', 'description') }), ('Form Configuration', { 'fields': ('form_schema',), 'classes': ('collapse',), 'description': 'JSON schema defining the form fields for this agent' }), ('n8n Integration', { 'fields': ('n8n_webhook_url', 'result_format'), 'classes': ('collapse',) }), ('Status & Settings', { 'fields': ('is_active', 'is_featured') }), ('Statistics', { 'fields': ('usage_count',), 'classes': ('collapse',) }) ) readonly_fields = ('usage_count',) def get_form(self, request, obj=None, **kwargs): form = super().get_form(request, obj, **kwargs) # Add help text for form_schema field if 'form_schema' in form.base_fields: form.base_fields['form_schema'].help_text = format_html('''

JSON schema example:

{
  "fields": [
    {
      "name": "description",
      "type": "textarea", 
      "label": "Content Description",
      "required": true,
      "placeholder": "Describe what you want to generate..."
    },
    {
      "name": "language",
      "type": "select",
      "label": "Language", 
      "options": ["English", "Arabic"],
      "required": true
    }
  ]
}
''') return form @admin.register(AgentExecution) class AgentExecutionAdmin(admin.ModelAdmin): list_display = ('user', 'agent', 'status', 'price_paid', 'created_at', 'completed_at') list_filter = ('status', 'agent', 'created_at') search_fields = ('user__email', 'agent__name') ordering = ('-created_at',) fieldsets = ( ('Execution Info', { 'fields': ('user', 'agent', 'status', 'price_paid') }), ('Input Data', { 'fields': ('input_data',), 'classes': ('collapse',) }), ('Output Data', { 'fields': ('output_data', 'error_message'), 'classes': ('collapse',) }), ('Timestamps', { 'fields': ('created_at', 'updated_at', 'completed_at'), 'classes': ('collapse',) }) ) readonly_fields = ('created_at', 'updated_at') def get_readonly_fields(self, request, obj=None): if obj: # Editing existing object return self.readonly_fields + ('user', 'agent', 'price_paid') return self.readonly_fields