You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.1 KiB
64 lines
2.1 KiB
|
|
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})
|
|
|