Ajout/édition de membre
This commit is contained in:
		
							parent
							
								
									6172fb8fec
								
							
						
					
					
						commit
						dc792aa009
					
				
					 7 changed files with 80 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -1,5 +1,10 @@
 | 
			
		|||
from dajngo import forms
 | 
			
		||||
from secrets import token_hex
 | 
			
		||||
 | 
			
		||||
from django import forms
 | 
			
		||||
from django.contrib.auth import forms as auth_forms
 | 
			
		||||
from django.db import transaction
 | 
			
		||||
 | 
			
		||||
from .models import Membre, User
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BootstrapMixin:
 | 
			
		||||
| 
						 | 
				
			
			@ -29,3 +34,22 @@ class LoginForm(BootstrapMixin, auth_forms.AuthenticationForm):
 | 
			
		|||
    username = forms.EmailField(
 | 
			
		||||
        widget=forms.EmailInput(attrs={"autofocus": True}),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UserEditForm(BootstrapMixin, forms.ModelForm):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = Membre
 | 
			
		||||
        fields = [
 | 
			
		||||
            "nom", "prenom", "fonction", "rue", "npa", "localite",
 | 
			
		||||
            "tel1", "tel2", "courriel", "date_naissance", "annee_entree",
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
    @transaction.atomic()
 | 
			
		||||
    def save(self, **kwargs):
 | 
			
		||||
        is_new = self.instance.pk is None
 | 
			
		||||
        if is_new:
 | 
			
		||||
            self.instance.user = User.objects.create_user("foo", self.instance.courriel, password=token_hex(10))
 | 
			
		||||
        elif "courriel" in self.changed_data:
 | 
			
		||||
            self.instance.user.email = self.cleaned_data["courriel"]
 | 
			
		||||
            self.instance.user.save()
 | 
			
		||||
        return super().save(**kwargs)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,12 +11,12 @@ class Migration(migrations.Migration):
 | 
			
		|||
        migrations.AddField(
 | 
			
		||||
            model_name='membre',
 | 
			
		||||
            name='annee_entree',
 | 
			
		||||
            field=models.PositiveSmallIntegerField(blank=True, null=True),
 | 
			
		||||
            field=models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='Année entrée'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='membre',
 | 
			
		||||
            name='date_naissance',
 | 
			
		||||
            field=models.DateField(blank=True, null=True),
 | 
			
		||||
            field=models.DateField(blank=True, null=True, verbose_name='Date de naissance'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='membre',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,8 +35,8 @@ class Membre(models.Model):
 | 
			
		|||
    tel1 = models.CharField("Tél. 1", max_length=20, blank=True)
 | 
			
		||||
    tel2 = models.CharField("Tél. 2", max_length=20, blank=True)
 | 
			
		||||
    courriel = models.EmailField("Courriel", blank=True)
 | 
			
		||||
    date_naissance = models.DateField(null=True, blank=True)
 | 
			
		||||
    annee_entree = models.PositiveSmallIntegerField(null=True, blank=True)
 | 
			
		||||
    date_naissance = models.DateField("Date de naissance", null=True, blank=True)
 | 
			
		||||
    annee_entree = models.PositiveSmallIntegerField("Année entrée", null=True, blank=True)
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return f"{self.nom} {self.prenom}"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,11 @@
 | 
			
		|||
from datetime import date, timedelta
 | 
			
		||||
from django.contrib.auth.mixins import LoginRequiredMixin
 | 
			
		||||
from django.views.generic import ListView, TemplateView
 | 
			
		||||
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
 | 
			
		||||
from django.urls import reverse_lazy
 | 
			
		||||
from django.views.generic import (
 | 
			
		||||
    CreateView, DeleteView, ListView, TemplateView, UpdateView
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
from .forms import UserEditForm
 | 
			
		||||
from .models import Agenda, Document, Membre
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -67,3 +71,26 @@ class EspaceMembresView(LoginRequiredMixin, TemplateView):
 | 
			
		|||
class ListeMembresView(LoginRequiredMixin, ListView):
 | 
			
		||||
    model = Membre
 | 
			
		||||
    template_name = "membres/liste.html"
 | 
			
		||||
 | 
			
		||||
    def get_queryset(self):
 | 
			
		||||
        return super().get_queryset().order_by("nom")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MembreAddView(PermissionRequiredMixin, CreateView):
 | 
			
		||||
    model = Membre
 | 
			
		||||
    form_class = UserEditForm
 | 
			
		||||
    permission_required = "beesgospel.add_user"
 | 
			
		||||
    template_name = "membres/edit.html"
 | 
			
		||||
    success_url = reverse_lazy("liste-membres")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MembreEditView(PermissionRequiredMixin, UpdateView):
 | 
			
		||||
    model = Membre
 | 
			
		||||
    form_class = UserEditForm
 | 
			
		||||
    permission_required = "beesgospel.change_user"
 | 
			
		||||
    template_name = "membres/edit.html"
 | 
			
		||||
    success_url = reverse_lazy("liste-membres")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MembreDeleteView(PermissionRequiredMixin, DeleteView):
 | 
			
		||||
    permission_required = "beesgospel.delete_user"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,9 @@ urlpatterns = [
 | 
			
		|||
    path("agenda/", views.AgendaView.as_view(), name="agenda"),
 | 
			
		||||
    path("medias/", views.MediaView.as_view(prive=False), name="medias"),
 | 
			
		||||
    path("membres/", views.EspaceMembresView.as_view(), name="membres"),
 | 
			
		||||
    path("membres/nouveau/", views.MembreAddView.as_view(), name="membre-add"),
 | 
			
		||||
    path("membres/<int:pk>/edit/", views.MembreEditView.as_view(), name="membre-edit"),
 | 
			
		||||
    path("membres/<int:pk>/delete/", views.MembreDeleteView.as_view(), name="membre-delete"),
 | 
			
		||||
    path("membres/liste/", views.ListeMembresView.as_view(), name="liste-membres"),
 | 
			
		||||
    path("membres/documents/", views.MediaView.as_view(prive=True), name="docs-membres"),
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								templates/membres/edit.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								templates/membres/edit.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
{% extends "base.html" %}
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
    <h2>Édition/ajout de membres</h2>
 | 
			
		||||
 | 
			
		||||
    <form method="post">{% csrf_token %}
 | 
			
		||||
        {{ form.as_div }}
 | 
			
		||||
        <div class="mt-3"><button type="submit" class="btn btn-primary">Enregistrer</button></div>
 | 
			
		||||
    </form>
 | 
			
		||||
{% endblock content %}
 | 
			
		||||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
{% block content %}
 | 
			
		||||
    <h2>Liste des membres</h2>
 | 
			
		||||
    <table class="table table-responsive">
 | 
			
		||||
        <tr><th>Nom/prénom</th><th>Fonction</th><th>Adresse</th><th>Téls.</th><th>Courriel</th><th>Date de naissance</th><th>Année d’entrée</th></tr>
 | 
			
		||||
        <tr><th>Nom/prénom</th><th>Fonction</th><th>Adresse</th><th>Téls.</th><th>Courriel</th><th>Date de naissance</th><th>Année d’entrée</th><th></th></tr>
 | 
			
		||||
    {% for membre in object_list %}
 | 
			
		||||
        <tr><td>{{ membre.nom }} {{ membre.prenom }}</td>
 | 
			
		||||
            <td>{{ membre.fonction }}</td>
 | 
			
		||||
| 
						 | 
				
			
			@ -11,8 +11,15 @@
 | 
			
		|||
            <td>{{ membre.tel1 }}<br>{{ membre.tel2 }}</td>
 | 
			
		||||
            <td>{{ membre.courriel }}</td>
 | 
			
		||||
            <td>{{ membre.date_naissance|date:"d.m.Y" }}</td>
 | 
			
		||||
            <td>{{ membre.annee_entree }}</td>
 | 
			
		||||
            <td>{{ membre.annee_entree|default_if_none:"" }}</td>
 | 
			
		||||
            <td>{% if perms.beesgospel.change_user %}
 | 
			
		||||
                <a href="{% url 'membre-edit' membre.pk %}"><img src="{% static 'admin/img/icon-changelink.svg' %}"></a>
 | 
			
		||||
                {% endif %}
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
    </table>
 | 
			
		||||
    {% if perms.beesgospel.add_user %}
 | 
			
		||||
    <div class="mt-3"><a class="btn btn-outline-primary" href="{% url 'membre-add' %}">Ajouter un membre</a></div>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue