django - 如何将特定书籍的 bookinstance.id 传递给 Django 中的基于函数的视图?
问题描述
我有一个 Django 图书馆应用程序,其中客户可以从图书列表中查看一本书(并重定向到 book_detail.html 页面),如果该书可用,则可以借阅该书。
book_detail.html - 借书按钮
{% for copy in book.bookinstance_set.all %}
{% if copy.status == 'a' %}
# <form method="POST" action ="{% url 'borrow_book' book_instance.id%}" enctype="multipart/form-data">
<form method="POST" action ="{% url 'borrow_book' copy.id%}" enctype="multipart/form-data">
{% csrf_token %}
<button type="submit" class="btn btn-success">Borrow the book</button>
</form>
{% endif %}
{% endfor %}
这是应用程序项目中的 urls.py 路由
path('book/<uuid:pk>/borrow/', views.borrow_book, name='borrow_book'),
并调用了函数 borrow_book:
def borrow_book(request, pk):
book_instance = get_object_or_404(BookInstance, pk=pk)
if request.method == 'POST':
if request.user.is_authenticated:
book_instance.borrower = request.user
book_instance.due_back = datetime.date.today() + datetime.timedelta(weeks=3)
book_instance.status = STATUS_ON_LOAN
book_instance.save()
return HttpResponseRedirect(reverse('dashboard_customer'))
context = {
'book_instance': book_instance,
}
return render(request, 'catalog/book_detail.html', context)
当用户点击借书按钮时,我需要创建这本书的一个实例,因此我使用的是 book_instance 模型。
这是 Book 和 BookInstance 模型之间的关系:
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey('Author', on_delete=models.SET_NULL, null=True)
class BookInstance(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular book across whole library')
book = models.ForeignKey('Book', on_delete=models.SET_NULL, null=True)
due_back = models.DateField(null=True, blank=True)
borrower = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
STATUS_MAINTENANCE = 'm'
STATUS_ON_LOAN = 'o'
STATUS_AVAILABLE = 'a'
STATUS_RESERVED = 'r'
LOAN_STATUS = (
(STATUS_MAINTENANCE, 'Maintenance'),
(STATUS_ON_LOAN, 'On loan'),
(STATUS_AVAILABLE, 'Available'),
(STATUS_RESERVED, 'Reserved'),
)
status = models.CharField(
max_length=1,
choices=LOAN_STATUS,
blank=True,
default='m',
help_text='Book availability',
)
单击borrow_button时,我遇到了错误:
NoReverseMatch at /catalog/book/16
Reverse for 'borrow_book' with no arguments not found. 1 pattern(s) tried: ['catalog/book/(?P<pk>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/borrow/$']
Request Method: GET
因此,在 book-detail.html 中,我如何(以何种方式)将 book_instance.id 传递给视图。
解决方案
请试试:
action ="{% url 'borrow_book' copy.id%}"
copy
似乎是您迭代的单个实例。
{% for copy in book.bookinstance_set.all %}
推荐阅读
- sql-server - 获取数据并在同一张表上使用子选择
- git - 创建新分支后自动更改文件
- php - 如何将 PDO 的 execute($variable) 转换为 MySQLi 语句
- json - 是否有为 json 模式指定版本的标准
- angular - 声明构造函数的最佳位置 - Typescript
- python - 如何使用计数器计算表中插入记录的数量并使用python脚本打印每个作业中插入记录的数量
- java - spring-data-jpa :找到对集合 org.hibernate.HibernateException 的共享引用
- ios - ReplayKit 广播扩展崩溃 EXC_RESOURCE RESOURCE_TYPE_MEMORY on mic on
- stream - Jitsi 多流处理
- android - 如何在android的饼图中为值/图表设置clicklistener?