这是一个图书馆管理web应用程序,我需要从一个BookIssue对象中根据它的id来过滤一个特定的图书对象,并在我点击issue按钮时将其设置为ISSUED。
其中Post模型包含图书的详细信息,BookIssue模型包含图书馆成员借阅图书的详细信息。当我单击html中的Issue时,它将转到BookIssueView类,在views.py中,我需要将Post模型的issued字段的值更改为True
请参阅views.py中的post = Post.objects.filter(id=self.request.GET.get('id')).update(issued=True),我需要获取我根据其id选择的特定书籍。我如何实现它?
models.py
class Post(models.Model):
title = models.CharField(max_length=100)
book_author = models.CharField(default="",max_length=100)
publisher = models.CharField(default="",max_length=100)
content = models.TextField(max_length=200)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
issued = models.BooleanField(default=False)
issued_to = models.CharField(default="",max_length=100,null=False)
issue_to_phone_number = models.CharField(default="",max_length=10)
def __str__(self):
return [self.title,self.id]
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk' : self.pk})
class BookIssue(models.Model):
issue_name = models.CharField(max_length=100,null=False)
issue_email = models.EmailField(max_length=254)
issue_phone_number = models.CharField(default="",max_length=10)
issue_address = models.TextField(max_length=300)
issued_book = models.ManyToManyField(Post,default="")
def __str__(self):
return self.issue_name
def get_absolute_url(self):
return reverse('blog-home')views.py
class BookIssueView(LoginRequiredMixin,CreateView,Post):
model = BookIssue
fields = ['issue_name','issue_email','issue_phone_number','issue_address']
def form_valid(self, form):
post = Post.objects.filter(id=self.request.GET.get('id')).update(issued=True)
form.instance.author = self.request.user
return super().form_valid(form)模板
bookissue_form.html
{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
<form method="post">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Issue Book</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-success" type="submit" name="button">Issue</button>
<button class="btn btn-danger" type="submit" name="button">Cancel</button>
</div>
</form>
</div>
{% endblock %}urls.py
from django.urls import path
from . import views
from .views import (PostListView,
PostDetailView,
PostCreateView,
PostUpdateView,
PostDeleteView,
BookIssueView,
BookReturnView)
urlpatterns = [
# path('',views.home, name='blog-home'),
path('',PostListView.as_view(), name='blog-home'),
path('post/<int:pk>/',PostDetailView.as_view(), name='post-detail'),
path('post/new/',PostCreateView.as_view(), name='post-create'),
path('post/<int:pk>/update/',PostUpdateView.as_view(), name='post-update'),
path('post/<int:pk>/delete/',PostDeleteView.as_view(), name='post-delete'),
path('post/<int:pk>/issue/',BookIssueView.as_view(), name='book-issue'),
path('post/<int:pk>/return/',BookReturnView.as_view(), name='book-return'),
path('about/',views.about, name='blog-about'),
]发布于 2019-08-24 06:29:55
id不在URL中,它在request.GET的pk kwarg中。
而且,您似乎没有做任何将帖子与BookIssue相关联的事情。
post = Post.objects.get(id=self.kwargs["pk"])
post.issued=True
post.save()
response = super().form_valid(form)
form.instance.issued_book.add(post)
return responsehttps://stackoverflow.com/questions/57632806
复制相似问题