Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django views.py中将一个类对象的id传递给另一个类对象_Python_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

Python 如何在django views.py中将一个类对象的id传递给另一个类对象

Python 如何在django views.py中将一个类对象的id传递给另一个类对象,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,这是一个图书馆管理web应用程序,我需要从BookIssue对象中按id筛选特定的图书对象,并在单击issue按钮时将其设置为已发行 这里Postmodel有图书的详细信息,BookIssue有图书馆成员借书的详细信息。 当我在html中单击Issue时,它将进入classBookIssueView,从视图.py我需要将Post模型的issued字段的值更改为True 请参见views.py中的post=post.objects.filter(id=self.request.GET.GET('i

这是一个图书馆管理web应用程序,我需要从BookIssue对象中按id筛选特定的图书对象,并在单击issue按钮时将其设置为已发行

这里
Post
model有图书的详细信息,
BookIssue
有图书馆成员借书的详细信息。 当我在html中单击Issue时,它将进入class
BookIssueView
,从
视图.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')
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)
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'),
]

views.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')
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)
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'),
]

模板

bookissue\u 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 %}


id不在
request.GET
中,它在URL的
pk
kwarg中

此外,您似乎没有做任何事情来将帖子与图书问题联系起来

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 response

那代码怎么了?没有得到筛选的值。也就是说,如果我点击id=8的书,它就不会过滤id=8的书。我刚刚更新了我的代码。请注意,现在它会更清楚@DanielRoseman您仍然没有描述问题。它有什么价值?会发生什么?你看到了什么?你会犯什么错误?并显示您的模板和URL。我没有看到任何错误,但当我单击“发布书籍”时,该书没有发布。发布和书籍发布之间的关系是什么?