diff --git a/src/planning/views.py b/src/planning/views.py index 84b0180..26dcf6e 100644 --- a/src/planning/views.py +++ b/src/planning/views.py @@ -64,16 +64,25 @@ def event_lookup(request): @login_required @require_http_methods(["GET", "POST"]) def event_create_or_update(request, eventid=None): - """ - Création ou mise à jour d'un event. + """Création ou mise à jour d'un évènement. + + Remarks: + * Il faut éviter de cibler une URL précise. + + Pour cela, il faut passer par la fonction `reverse`: + https://docs.djangoproject.com/fr/3.1/ref/urlresolvers/ + + Si jamais l'URL `/event` devait être modifiée, cela ne fonctionnerait plus. + + * J'ai modifié l'ordre des conditions pour un peu plus de clarté. + Notamment, tu faisais une première requête pour récupérer le nom du lieu + Mais tu n'utilisais cette valeur que dans le cas d'un GET. + + Dans ce cas-ci, une CBV serait intéressante, parce qu'elle découplerait + complètement le GET du POST. """ - if eventid: - event = get_object_or_404(Event, pk=eventid) - data = {"place_related": event.place.name} - else: - event = None - data = {} + if request.method == "POST": form = EventForm(request.POST, instance=event) @@ -85,6 +94,14 @@ def event_create_or_update(request, eventid=None): else: return HttpResponseRedirect("/event/") else: + data = {} + + if eventid: + event = get_object_or_404(Event, pk=eventid) + data["place_related"] = event.place.name + else: + event = None + form = EventForm(instance=event, initial=data) context = {"form": form, "eventid": eventid} @@ -93,8 +110,16 @@ def event_create_or_update(request, eventid=None): @require_http_methods(["GET"]) def link_gymnast_to_event(request, eventid, gymnastid): - """ - Crée un lien entre un gymnaste et un évènement. + """Crée un lien entre un gymnaste et un évènement. + + Returns: + Si tout se passe bien, un code 200 (Success) est retourné. + + Excepts: + Si une erreur se produit lors de l'association, un code HTTP 409 (Conflict) est retourné. + + Remarks: + Tu ne veux pas retourner le lien qui vient d'être créé ? """ try: gymnast = get_object_or_404(Gymnast, pk=gymnastid) @@ -109,8 +134,14 @@ def link_gymnast_to_event(request, eventid, gymnastid): @require_http_methods(["GET"]) def remove_link_between_gymnast_and_event(request, eventid, gymnastid): - """ - Supprime le lien entre un gymnaste et un évènement. + """Supprime le lien entre un gymnaste et un évènement. + + Remarks: + En fait, tes fonctions `link_gymnast_to_event` + et `remove_link_between_gymnast_and_event` sont _très_ similaires. + + Il faudrait sans doute mieux passer par une CBV, voire mieux: DRF ;-) + Surtout qu'ici, on gère directement des `link_between_g_and_e`, à ajouter ou supprimer. """ try: gymnast = get_object_or_404(Gymnast, pk=gymnastid) @@ -124,20 +155,30 @@ def remove_link_between_gymnast_and_event(request, eventid, gymnastid): def __get_event_list(request): + """Récupère une liste d'évènement. + + Par défaut, la liste est triée chronologiquement - le plus ancien étant le premier élément. + + Cette fonction est utilisée pour l'affichage des évènements et au niveau du calendrier. + + Args: + request (HttpRequest): La requête en entrée + pattern (str?): Optionnel. Permet de spécifier un pattern à appliquer à la recherche. + """ pattern = request.GET.get("pattern", None) + if pattern: - event_list = Event.objects.filter(name__icontains=pattern).order_by("datebegin") + event_list = Event.objects.filter(name__icontains=pattern) else: - event_list = Event.objects.all().order_by("datebegin") - return event_list + event_list = Event.objects.all() + + return event_list.order_by("datebegin") @login_required @require_http_methods(["GET"]) def calendar(request): - """ - Récupère la liste de tous évènements suivant un pattern si celui-ci est - définit. + """Récupère la liste de tous évènements suivant un pattern si celui-ci est définit. """ event_list = __get_event_list(request) context = {"event_list": event_list} @@ -216,7 +257,7 @@ def event_detail(request, eventid): @require_http_methods(["GET"]) def course_detail(request, courseid, date=None): """ - Récupère toutes les informations d'un course. + Récupère toutes les informations d'un cours. :return: une instance de la classe `Course`, une liste de gymnaste associés à ce cours, … @@ -1238,8 +1279,10 @@ def program_date_listing(request, gymnastid=None): @login_required @require_http_methods(["GET", "POST"]) def planningline_update(request, planninglineid=None): - """ - Mise à jour d'une ligne de programme. + """Mise à jour d'une ligne de programme. + + Remarks: + Pourquoi ne pas juste faire un `form.save()` plutôt que de réattribuer chaque valeur ? """ planningline = get_object_or_404(PlanningLine, pk=planninglineid)