我正在尝试创建一个视图,其中列出特定用户所有图书在我的图书馆应用中特定用户。但是我一直收到以下错误:
当用户点击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 %}
答案 0 :(得分:0)
错误告诉你,没有pk参数,网址book-detail