diff --git a/manuels/forms.py b/manuels/forms.py
index 1a72a5e..45a2957 100644
--- a/manuels/forms.py
+++ b/manuels/forms.py
@@ -3,19 +3,31 @@ from django import forms
from manuels.models import Book, SuppliesRequirement
-class AddBookForm(forms.ModelForm):
+class EditBookForm(forms.ModelForm):
class Meta:
model = Book
+ fields = ['teacher', 'level', 'field', 'no_book', 'title', 'authors', 'editor', 'publication_year',
+ 'isbn', 'price', 'previously_acquired', 'comments']
+
+ no_book = forms.BooleanField(label='Pas de livre pour cette classe/matière', required=False, initial=False)
+
+
+class AddBookForm(EditBookForm):
+ class Meta(EditBookForm.Meta):
fields = ['teacher', 'level', 'field', 'no_book', 'title', 'authors', 'editor', 'publication_year',
'isbn', 'price', 'previously_acquired', 'comments', 'add_another']
add_another = forms.BooleanField(label='Ajouter un autre livre', required=False, initial=True)
- no_book = forms.BooleanField(label='Pas de livre pour cette classe/matière', required=False, initial=False)
-class AddSuppliesForm(forms.ModelForm):
+class EditSuppliesForm(forms.ModelForm):
class Meta:
model = SuppliesRequirement
exclude = ['done']
+
+class AddSuppliesForm(forms.ModelForm):
+ class Meta(EditSuppliesForm.Meta):
+ pass
+
add_another = forms.BooleanField(label="Ajouter d'autres fournitures", required=False, initial=True)
diff --git a/manuels/models.py b/manuels/models.py
index 9ff2cbb..7b04beb 100644
--- a/manuels/models.py
+++ b/manuels/models.py
@@ -154,6 +154,10 @@ class Book(BaseModel):
def __str__(self):
return f'{self.title} ({self.authors}) - {self.isbn}'
+ def get_absolute_url(self):
+ from django.urls import reverse
+ return reverse('edit_book', kwargs={'teacher_pk': str(self.teacher.pk), 'pk': str(self.pk)})
+
class SuppliesRequirement(BaseModel):
class Meta:
diff --git a/manuels/templates/manuels/add_item.html b/manuels/templates/manuels/add_item.html
index c3d9140..8199a84 100644
--- a/manuels/templates/manuels/add_item.html
+++ b/manuels/templates/manuels/add_item.html
@@ -8,7 +8,7 @@
Bienvenue {{ teacher.full_name }}
- {% block title %}Ajouter {{ item }}{% endblock %}
+ {% block title %}{{ verb }} {{ item }}{% endblock %}
Retour à la liste des {{ item_plural }}
{% if message_template %}
diff --git a/manuels/templates/manuels/base.html b/manuels/templates/manuels/base.html
index 8d5287d..47808e8 100644
--- a/manuels/templates/manuels/base.html
+++ b/manuels/templates/manuels/base.html
@@ -6,6 +6,10 @@
Manuels - {% block title %}{% endblock %}
+
+
diff --git a/manuels/templates/manuels/list_books_supplies.html b/manuels/templates/manuels/list_books_supplies.html
index 71f54c7..38e9671 100644
--- a/manuels/templates/manuels/list_books_supplies.html
+++ b/manuels/templates/manuels/list_books_supplies.html
@@ -31,7 +31,7 @@
# |
Classe |
- Matière |
+ Discipline |
Titre |
Auteurs |
Éditeur |
@@ -45,7 +45,7 @@
{% for book in books %}
- {{ forloop.counter }} |
+ |
{{ book.level }} |
{{ book.field }} |
{{ book.title }} |
@@ -73,16 +73,16 @@
# |
Classe |
- Matière |
+ Disciplines |
Liste de fournitures |
{% for supply in supplies %}
- {{ forloop.counter }} |
+ |
{{ supply.level }} |
- {{ supply.field }} |
+ {{ supply.fields }} |
{{ supply.supplies|linebreaksbr }} |
{% endfor %}
diff --git a/manuels/urls.py b/manuels/urls.py
index 201c205..0b91b38 100644
--- a/manuels/urls.py
+++ b/manuels/urls.py
@@ -1,10 +1,13 @@
from django.urls import path
-from manuels.views import AddBookView, ListBooksView, clear_teacher_view, AddSuppliesView
+from manuels.views import AddBookView, ListBooksView, clear_teacher_view, AddSuppliesView, EditBookView,\
+ EditSuppliesView
urlpatterns = [
path('teacher//add_book', AddBookView.as_view(), name='add_book'),
path('teacher//add_supplies', AddSuppliesView.as_view(), name='add_supplies'),
path('teacher/', ListBooksView.as_view(), name='list_books'),
+ path('teacher//book/', EditBookView.as_view(), name='edit_book'),
+ path('teacher//supplies/', EditSuppliesView.as_view(), name='edit_supplies'),
path('clear', clear_teacher_view, name='clear_teacher'),
]
diff --git a/manuels/views.py b/manuels/views.py
index ee9f33a..e7332d4 100644
--- a/manuels/views.py
+++ b/manuels/views.py
@@ -1,9 +1,10 @@
from django.contrib import messages
+from django.contrib.auth.mixins import PermissionRequiredMixin
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
-from django.views.generic import CreateView, ListView
+from django.views.generic import CreateView, ListView, UpdateView
-from manuels.forms import AddBookForm, AddSuppliesForm
+from manuels.forms import AddBookForm, AddSuppliesForm, EditBookForm, EditSuppliesForm
from manuels.models import Teacher, Book, SuppliesRequirement
import logging
@@ -31,9 +32,10 @@ class HomePageView(CreateView):
class BaseTeacherView:
teacher = None
+ teacher_field = 'pk'
def dispatch(self, request, *args, **kwargs):
- self.teacher = get_object_or_404(Teacher, pk=self.kwargs['pk'])
+ self.teacher = get_object_or_404(Teacher, pk=self.kwargs[self.teacher_field])
request.session['teacher_pk'] = str(self.teacher.pk)
return super().dispatch(request, *args, **kwargs)
@@ -58,18 +60,21 @@ class ListBooksView(BaseTeacherView, ListView):
return Book.objects.filter(teacher=self.teacher)
-class AddItemView(BaseTeacherView, CreateView):
+class ItemView(BaseTeacherView):
add_another = False
item_text = None
item_text_plural = None
success_target = None
message_template = None
+ template_name = 'manuels/add_item.html'
+ verb = None
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['item'] = self.item_text
context['item_plural'] = self.item_text_plural
context['message_template'] = self.message_template
+ context['verb'] = self.verb
return context
def get_initial(self):
@@ -82,9 +87,9 @@ class AddItemView(BaseTeacherView, CreateView):
form.fields['teacher'].queryset = Teacher.objects.filter(pk=self.teacher.pk)
return form
- def form_valid(self, form):
- self.add_another = form.cleaned_data['add_another']
- return super().form_valid(form)
+
+class AddItemView(ItemView, CreateView):
+ verb = 'Ajouter'
def get_success_url(self):
messages.success(self.request, f'"{self.object}" a été ajouté.')
@@ -93,26 +98,58 @@ class AddItemView(BaseTeacherView, CreateView):
else:
return reverse('list_books', args=[str(self.teacher.pk)])
+ def form_valid(self, form):
+ self.add_another = form.cleaned_data['add_another']
+ return super().form_valid(form)
-class AddBookView(AddItemView):
+
+class BookView:
model = Book
- template_name = 'manuels/add_item.html'
- form_class = AddBookForm
success_target = 'add_book'
item_text = 'un livre'
item_text_plural = 'livres'
-class AddSuppliesView(AddItemView):
+class AddBookView(BookView, AddItemView):
+ form_class = AddBookForm
+
+
+class SuppliesView:
model = SuppliesRequirement
- template_name = 'manuels/add_item.html'
- form_class = AddSuppliesForm
success_target = 'add_supplies'
item_text = 'des fournitures'
item_text_plural = 'fournitures'
message_template = 'manuels/supplies_message.html'
+class AddSuppliesView(SuppliesView, AddItemView):
+ form_class = AddSuppliesForm
+
+
+class EditItemView(ItemView, UpdateView):
+ template_name = 'manuels/add_item.html'
+ teacher_field = 'teacher_pk'
+ item_text = None
+ item_text_plural = None
+ message_template = None
+ verb = 'Modifier'
+
+ def get_queryset(self):
+ return self.model.objects.filter(teacher=self.teacher)
+
+ def get_success_url(self):
+ messages.success(self.request, f'"{self.object}" a été modifié.')
+ return reverse('list_books', args=[str(self.teacher.pk)])
+
+
+class EditBookView(BookView, EditItemView):
+ form_class = EditBookForm
+
+
+class EditSuppliesView(SuppliesView, EditItemView):
+ form_class = EditSuppliesForm
+
+
def clear_teacher_view(request):
if request.session['teacher_pk']:
del request.session['teacher_pk']