from django.contrib import admin, messages from django.urls import path from django.shortcuts import render, redirect from django import forms from .models import Course, Arrivee, Coureur @admin.register(Course) class CourseAdmin(admin.ModelAdmin): list_display = ('nom', 'date', 'type', 'owner', 'depart', 'fin') search_fields = ('nom', 'owner__username') list_filter = ('date', 'type') fields = ('nom', 'date', 'type', 'owner', 'depart', 'fin') @admin.register(Arrivee) class ArriveeAdmin(admin.ModelAdmin): list_display = ('course', 'coureur', 'temps', 'rang', 'date_arrivee') search_fields = ('course__nom', 'coureur__nom') list_filter = ('course',) @admin.register(Coureur) class CoureurAdmin(admin.ModelAdmin): list_display = ('id', 'nom', 'prenom', 'classe') search_fields = ('nom', 'prenom', 'classe') list_filter = ('classe',) change_list_template = "admin/main/coureur_changelist.html" def get_urls(self): urls = super().get_urls() custom_urls = [ path('import-csv/', self.admin_site.admin_view(self.import_csv), name='main_coureur_import_csv'), ] return custom_urls + urls class CsvImportForm(forms.Form): csv_file = forms.FileField(label="Fichier CSV (nom;prenom;classe)") def import_csv(self, request): if request.method == "POST": form = self.CsvImportForm(request.POST, request.FILES) if form.is_valid(): csv_file = form.cleaned_data['csv_file'] imported = 0 ignored = 0 for line in csv_file.read().decode('utf-8').splitlines(): parts = [p.strip() for p in line.split(';')] if len(parts) != 3: continue nom, prenom, classe = parts classe = classe.replace(' ', '') if Coureur.objects.filter(nom=nom, prenom=prenom, classe=classe).exists(): ignored += 1 continue Coureur.objects.create(nom=nom, prenom=prenom, classe=classe) imported += 1 self.message_user(request, f"Import terminé : {imported} ajoutés, {ignored} ignorés (doublons).", messages.SUCCESS) return redirect("..") else: form = self.CsvImportForm() return render(request, "admin/main/import_csv.html", {"form": form})