Add verview of persons
authorSven Arnold <sven@internetallee.de>
Mon, 8 Feb 2016 18:15:00 +0000 (19:15 +0100)
committerSven Arnold <sven@internetallee.de>
Mon, 8 Feb 2016 18:15:00 +0000 (19:15 +0100)
project/books/models.py
project/books/templates/books/index.html
project/books/templates/books/persons.html [new file with mode: 0644]
project/books/urls.py
project/books/views.py

index ef16a0f..0abba86 100644 (file)
@@ -5,8 +5,14 @@ class Book(models.Model):
        def __str__(self):
                return self.title
 
+class Person(models.Model):
+       name = models.CharField(max_length = 200)
+       def __str__(self):
+               return self.name
+
 class Lease(models.Model):
        book = models.ForeignKey(Book, on_delete=models.CASCADE)
-       leasee = models.CharField(max_length = 200)
+       leasee = models.ForeignKey(Person, on_delete=models.CASCADE)
        def __str__(self):
                return "%s (%s)" % (self.book, self.leasee)
+
index f1cb109..6a5a740 100644 (file)
@@ -1,3 +1,5 @@
+<a href="{% url 'persons' %}">Personen</a>
+<div>
 {% if book_list %}
        <ul>
                {% for book in book_list %}
@@ -17,3 +19,4 @@
        <input type="text" name="title" />
        <input type="submit" value="Neues Buch" />
 </form>
+</div>
diff --git a/project/books/templates/books/persons.html b/project/books/templates/books/persons.html
new file mode 100644 (file)
index 0000000..5943315
--- /dev/null
@@ -0,0 +1,18 @@
+<a href="{% url 'index' %}">Bücher</a>
+<div>
+{% if person_list %}
+       <ul>
+               {% for person in person_list %}
+                       <li> {{person}} 
+                               <ul>
+                                       {% for lease in person.lease_set.all %}
+                                               <li><a href="{% url 'return_book' lease.id %}">{{ lease.book }}</a></li>
+                                       {% endfor %}
+                               </ul>
+                       </li>
+               {% endfor %}
+       </ul>
+{% else %}
+       Keine Personen eingetragen.
+{% endif %}
+</div>
index a55716b..4ef1012 100644 (file)
@@ -7,4 +7,5 @@ urlpatterns = [
        url(r'^(?P<book_id>\d+)$', views.detail, name="detail"),
        url(r'^(?P<book_id>\d+)/lease$', views.lease_book, name="lease_book"),
        url(r'^lease/(?P<lease_id>\d+)/return$', views.return_book, name="return_book"),
+       url(r'^persons$', views.PersonIndexView.as_view(), name='persons')
 ]
index 2a8b689..687beac 100644 (file)
@@ -1,8 +1,9 @@
 from django.shortcuts import render
 from django.core.urlresolvers import reverse
 from django.http import HttpResponse, HttpResponseRedirect
+from django.views import generic
 
-from books.models import Book, Lease
+from books.models import Book, Lease, Person
 
 def index(request):
        try:
@@ -28,10 +29,20 @@ def return_book(request, lease_id):
 def lease_book(request, book_id):
        book = Book.objects.get(pk = book_id)
        try:
-               leasee = request.POST['leasee']
+               leasee_name = request.POST['leasee']
+               leasee, new_person = Person.objects.get_or_create(name=leasee_name)
+               if new_person:
+                       leasee.save()
                lease = Lease(book = book, leasee = leasee)
                lease.save()
                return HttpResponseRedirect(reverse('index'))
        except KeyError:
                return render(request, 'books/lease.html', {'book': book})
 
+
+class PersonIndexView(generic.ListView):
+       template_name = 'books/persons.html'
+       context_object_name = 'person_list'
+       
+       def get_queryset(self):
+               return Person.objects.order_by('name')[:10]