django - 如何在此列表中捕获图书的名称或 reg_no?
问题描述
我正在研究图书馆系统。我无法获得要退回图书馆的一本书/书籍的注册号...我的目的是单击Return
哪个捕获书名以进行退回处理..以我所拥有的,当我print(book)
返回 None 时没有任何意义已从单击我的模型中获取
class Books(models.Model):
DEPARTMENT = (
('COM', 'Computer'),
('ELX', 'Electronics'),
('CIV', 'Civil'),
('BBS', 'Business'),
('MSC', 'Miscellaneous'),
)
reg_no = models.CharField(max_length=20, blank=True)
book_name = models.CharField(max_length=200)
no_of_books = models.IntegerField()
book_detail = models.TextField(default='text')
department = models.CharField(max_length=3, choices=DEPARTMENT)
def Claimbook(self):
if self.no_of_books>1:
self.no_of_books=self.no_of_books-1
self.save()
else:
print("not enough books to Claim")
def Addbook(self):
self.no_of_books=self.no_of_books+1
self.save()
def __str__(self):
return self.book_name
class Return(models.Model):
return_date = models.DateField(default=datetime.date.today)
borrowed_item = models.ForeignKey(Issue,on_delete=models.CASCADE)
def new_issue(request):
if request.method == 'POST':
i_form = IssueForm(request.POST)
if i_form.is_valid():
name = i_form.cleaned_data['borrower_id']
book = i_form.cleaned_data['book_id']
i_form.save(commit=True)
books = Books.objects.get(book_name=book)#Get a book names as selected in the dropdown
semest = Student.objects.get(name=name).semester#Get a student with a semester as selected in the dropdown
departm = Student.objects.get(name=name).depart
Books.Claimbook(books)
return redirect('new_issue')
else:
i_form = IssueForm()
semest = None
departm = None
sem_book = Semester.objects.filter(sem=semest, depart=departm)
return render(request, 'libman/new_issue.html', {'i_form': i_form, 'sem_book': sem_book})
返回视图
def return_book(request):
book = request.GET.get('book_pk')
print(book)
books = Books.objects.get(id=book)
#b_id = r_form.cleaned_data['borrower_id']
Books.Addbook(books)
Issue.objects.filter(borrower_id=1, id=book).delete()
return render(request,'libman/view_issue.html',{'issue':issue})
显示借阅书籍的模板,每本书旁边都有一个返回链接。
{% if issue %}
<table class="layout">
<thead>
<th>Reg No.</th>
<th>Student Name</th>
<th>Book Name</th>
<th>Issue Date</th>
<th>Action</th>
</thead>
{% for borrow in issue %}
<tr>
<td>{{ borrow.borrower_id.student_id }}</td>
<td>{{ borrow.borrower_id }}</td>
<td>{{ borrow.book_id }}</td>
<td>{{ borrow.issue_date }}</td>
<td name='book_pk'><a href="{% url 'return_book' %}">Return</a> </td>
</tr>
{% endfor %}
</table>
{% else %}
<p> There are no books registered. </p>
{% endif %}
问题模型
class Issue(models.Model):
borrower_id = models.ForeignKey(Student,on_delete=models.CASCADE)
book_id = models.ForeignKey(Books,on_delete=models.CASCADE)
issue_date = models.DateField(default=datetime.date.today)
def __str__(self):
return str(self.book_id)
解决方案
如果我理解正确 - 我相信您需要将 borrow.book_id 传递给返回视图。所以返回视图知道你想要返回哪本书
在您的模板中添加变量 book_pk 如下
<td name='book_pk'><a href="{% url 'return_book' book_pk = borrow.book_id %}">Return</a> </td>
您还需要更新 urls.py 文件以接受类似这样的新变量
urlpatterns = [
path('returnbook/<book_pk>/', return_book),
]
但上述内容还需要更新您的视图函数以处理新传递的参数并获取对象等。
def return_book(request,book_pk):
或者
您可以添加带有提交按钮的表单
<form action="{% url 'return_book' %}">
<label for="book_id">Borrowed Book_id</label>
<input type="text" id="book_id" name="book_pk" value="{{ borrow.book_id }}" disabled><br><br>
<input type="submit" value="Submit">
</form>
我认为它应该适用于您当前的代码
推荐阅读
- java - 为什么角度不规则
- javascript - VBA 未按元素 ID 填写
- entity-framework - 在 EntityFrameworkCore.Relational 中找不到 Microsoft.Data.Entity
- c# - 获取本地IP地址的任何其他方式
- python-3.x - 从任何 BigQuery 表读取数据并写入目标 BQ 表时如何获取结果行数(使用 bigquery.QueryJobConfig())?
- python - 熊猫删除值与列名相同的行
- css - 固定位置列的完整背景色
- java - 如何解决警告:对泛型类型的引用应参数化
- c - 在 C 中动态创建 Char* 数组
- javascript - 使用 Jest 测试 img 标签 onload 事件