admin.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from django.contrib import admin
  2. from django.db.models import Q
  3. from django.utils import timezone
  4. from .models import Service, ServiceType, IPResource
  5. class ServiceTypeFilter(admin.SimpleListFilter):
  6. title = 'type de service'
  7. parameter_name = 'type'
  8. def lookups(self, request, model_admin):
  9. return ServiceType.objects.all().values_list('pk', 'name')
  10. def queryset(self, request, queryset):
  11. if self.value():
  12. return queryset.filter(service_type__pk=self.value())
  13. class ServiceStatusFilter(admin.SimpleListFilter):
  14. title = 'status du service'
  15. parameter_name = 'status'
  16. def lookups(self, request, model_admin):
  17. return (
  18. ('ongoing', 'En cours'),
  19. ('finished', 'Terminé'),
  20. )
  21. def queryset(self, request, queryset):
  22. if self.value() == 'ongoing':
  23. return queryset.filter(end__isnull=True)
  24. if self.value() == 'finished':
  25. return queryset.filter(end__isnull=False)
  26. class ServiceAdmin(admin.ModelAdmin):
  27. list_display = ('id', 'adherent', 'service_type', 'start', 'end_view',)
  28. list_filter = (ServiceStatusFilter, ServiceTypeFilter,)
  29. def end_view(self, obj):
  30. return obj.end
  31. end_view.short_description = 'Fin du service'
  32. end_view.empty_value_display = 'Service en cours'
  33. class InUseFilter(admin.SimpleListFilter):
  34. title = 'disponibilité'
  35. parameter_name = 'available'
  36. def lookups(self, request, model_admin):
  37. return (
  38. (1, 'Disponible'),
  39. (0, 'Non disponible'),
  40. )
  41. def queryset(self, request, queryset):
  42. in_use_filter = Q(service__start__gte=timezone.now()) \
  43. | Q(service__end__isnull=True)
  44. if self.value() == '0':
  45. return queryset.filter(in_use_filter)
  46. if self.value() == '1':
  47. return queryset.exclude(in_use_filter)
  48. class IPResourceAdmin(admin.ModelAdmin):
  49. list_display = ('__str__', 'in_use_view')
  50. list_filter = (InUseFilter,)
  51. def in_use_view(self, obj):
  52. return not obj.in_use
  53. in_use_view.short_description = 'Disponible'
  54. in_use_view.boolean = True
  55. admin.site.register(Service, ServiceAdmin)
  56. admin.site.register(ServiceType)
  57. admin.site.register(IPResource, IPResourceAdmin)