尝试为当前用户借出的所有书籍列表创建视图

时间:2017-10-27 18:06:42

标签: python django templates

我正在尝试创建一个视图,其中列出特定用户所有图书在我的图书馆应用中特定用户。但是我一直收到以下错误:

enter image description here

enter image description here

当用户点击books borrowed链接时,应将用户重定向到list view,其中包含用户借阅的图书,并将图书的名称呈现为允许用户访问的链接这本书的detail view

  

以下是代码:

models.py

from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
from datetime import date




class Genre(models.Model):

    genre_name = models.CharField(max_length = 200, help_text = "Enter a book genre")

    def __str__(self):

        return self.genre_name



class Mind_Book(models.Model):

    Title = models.CharField(max_length=200)
    author = models.ForeignKey('Author', on_delete=models.SET_NULL, null = True)
    Summary = models.TextField(max_length=1000, help_text="Enter a brief description of the book")
    isbn = models.CharField('ISBN', max_length=13, help_text='13 Character <a href = "https://www.isbn-international.org/content/what-isbn">ISBN Number</a>')
    genre_relation = models.ManyToManyField(Genre, help_text = "Selct a genre for this book")
    language_relation = models.ForeignKey('Language', on_delete=models.SET_NULL, null = True)


    def __str__(self):
        return self.Title

# returns the url to access a particular book instance
    def get_absolute_url(self):
        return reverse('book-detail', args= [str(self.id)])


    def genre_representation(self):
        return ', '.join([genre_relation.genre_name for genre_relation in self.genre_relation.all()[:3]])

    genre_representation.short_description = 'Genre'


import uuid
from datetime import date


class Instance_Book(models.Model):

    Instance_ID = models.UUIDField(primary_key = True, default = uuid.uuid4, help_text = 'Unique ID for this particular book across whole library')
    Book = models.ForeignKey('Mind_Book', on_delete=models.SET_NULL, null =True)
    Imprint = models.CharField(max_length = 200)
    due_back = models.DateField(null = True, blank = True)
    borrower = models.ForeignKey(User, on_delete=models.SET_NULL, null = True, blank =  True)

    @property

    def is_overdue(self):
        if self.due_back and date.today() > self.due_back:

            return True

        return False




    LOAN_STATUS = (

        ('M', 'Maintenance'),
        ('O', 'On Loan'),
        ('A', 'Available'),
        ('T', 'Taciturn'),
    )

    Status =models.CharField(max_length = 1, choices=LOAN_STATUS, blank=True, default='M', help_text='Book availability')



    class Meta:

        ordering = ["due_back"]
        permissions = (("can_mark_returned", "Set books as returned"),)


    def __str__(self):
        return '%s (%s) %s' % (self.Instance_ID, self.Book.Title, self.due_back)




class Author(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    date_of_birth = models.DateField(null=True, blank=True)
    date_of_death = models.DateField('Died', null=True, blank=True)

    def get_absolute_url(self):
        return reverse('author-detail', args = [str(self.id)])

    def __str__(self):
        return '%s, %s' %(self.last_name, self.first_name)



class Language(models.Model):

    language_Title = models.CharField(max_length=30, help_text="Enter a the book's natural language (e.g. English, French, Japanese etc.)")

    def __str__(self):
        return self.language_Title

views.py

class Mind_List_view(generic.ListView):

    model = Mind_Book
    paginate_by = 2


class Mind_Specific_view(generic.DetailView):

    model = Mind_Book





class Author_List_view(generic.ListView):

    model = Author
    paginate_by = 2


class Author_Specific_view(generic.DetailView):

    model = Author


class Mind_loan_By_UserListView(LoginRequiredMixin, generic.ListView):

    model = Instance_Book
    template_name = 'catalog/instance_book_list_borrowed_user.html'


    def get_queryset(self):
        return Instance_Book.objects.filter(borrower=self.request.user).filter(Status__exact='O').order_by('due_back')


class Mind_loanBooks_AllListView(PermissionRequiredMixin, generic.ListView):

    model = Instance_Book
    permission_required = 'catalog.can_mark_returned'


    template_name = 'catalog/instance_book_list_borrowed_all.html'



    def get_queryset(self):
        return Instance_Book.objects.filter(Status__exact='O').order_by('due_back')

urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
        url(r'^$', views.nest, name = 'nest'),
        url(r'^index-page/$', views.index, name = 'index'),
        url(r'^books/$', views.Mind_List_view.as_view(), name = 'books'),
        url(r'^book/(?P<pk>\d+)$', views.Mind_Specific_view.as_view(), name='book-detail'),
        url(r'^authors/$', views.Author_List_view.as_view(), name = 'authors'),
        url(r'^author/(?P<pk>\d+)$', views.Author_Specific_view.as_view(), name = 'author-detail'),
]


urlpatterns += [

            url(r'^user-books/$', views.Mind_loan_By_UserListView.as_view(), name = 'user-borrowed'),
            url(r'^borrowed/$', views.Mind_loanBooks_AllListView.as_view(), name = 'all-borrowed')
]

模板

{% extends "base_generic.html" %}


{% block content %}

{% if instance_book_list %}

<ul>

  {% for instanceMind in instance_book_list %}


  <li class="{% if instanceMind.is_overdue %}text-danger{%endif%}">


    <a href="{% url 'book-detail'  instanceMind.book.pk %}">{{instanceMind.book.Title}}</a>

              {{instanceMind.Imprint }}
              {{instanceMind.due_back}}
  </li>

  {% endfor %}
</ul>


{% endif %}
{% endblock %}

基本模板

     {% block sidebar %}

      <ul class="sidebar-nav">

          <li><a href = "{% url 'index' %}">Dashboard</a></li>
          <li><a href="{% url 'authors'%}">All authors</a></li>
          <li><a href="{% url 'nest' %}">Home</a></li>
          <li><a href="{% url 'books' %}">All books</a></li>



          {% if user.is_authenticated %}
    <li>User: {{ user.get_username }}</li>
    <li><a href="{% url 'user-borrowed' %}">Books Borrowed</a></li>
    <li><a href="{% url 'logout'%}?next={{request.path}}">Logout</a></li>
  {% else %}
    <li><a href="{% url 'login'%}?next={{request.path}}">Login</a></li>
  {% endif %}
      </ul>

      {% if user.is_staff %}
         <hr />
         <ul class="sidebar-nav">
         <li>Staff</li>
         {% if perms.catalog.can_mark_returned %}
         <li><a href="{% url 'all-borrowed' %}">All borrowed</a></li>
         {% endif %}
         </ul>
          {% endif %}
     {% endblock %}

1 个答案:

答案 0 :(得分:0)

错误告诉你,没有pk参数,网址book-detail

是预期的