首页 > 解决方案 > Django:找不到页面(404),请求 URL:http://127.0.0.1:8000/Loader/confirm_booking/17 提出者:Loader.views.booking_approve

问题描述

在用户批准帖子的项目上工作,然后单击该帖子应由用户批准的按钮......但是,在单击它时会显示这样的错误。

这是预订模型

class Booking(models.Model):
     order_id = models.AutoField(primary_key= True,default='1')
     b_price = models.ForeignKey(price, on_delete=models.CASCADE, related_name='b_prices',default='')
     b_post = models.ForeignKey(Loader_post, on_delete=models.CASCADE, 
     related_name='b_posts',default='')
     booked_at = models.DateField(auto_now=True)
     user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, default='')
     approved_price = models.BooleanField(default=False)

这是我的意见.py

def booking_approve(request,pk):
    booking = get_object_or_404(Booking, pk=pk)
    booking.save()
    booking.approve()
    return redirect('Loader:post', pk=pk)

这是我的批准和拒绝页面的 HTML,用户可以在单击批准按钮时拒绝报价和批准,帖子、用户、驱动程序的所有详细信息都应保存到数据库中,但它不起作用。

{% for loader_post in request.user.Loader.all %} {% for price in loader_post.prices.all %}



 <div class="card" style="margin-right: 30%; width: 22%; margin-bottom: 5%; text-align: left;">


     <div class="container">
    <img src="{{loader_post.image_of_load.url }}" alt="Avatar" style="width:100%; height: 25%; margin-bottom: 10px; ">
    <h4><b>Post id : {{loader_post.id }}</b></h4>
    <p>Driver offer : <i class="fa fa-inr" aria-hidden="true"></i>{{price.driver_price }}</p>
    <p>Offer by : {{price.driver_name }}</p>
    <a style="margin-right:20px;" href="{% url 'Loader:booking_remove' pk=price.pk %}"><i class="fa fa-times fa-4x" style="color: red;" aria-hidden="true"></i></a>
    <a href="{% url 'Loader:booking_approve' pk=price.pk %}"><i class="fa fa-check-circle fa-4x" aria-hidden="true"></i></a>
</div>

这是我的 urls.py

 path('confirm_booking/<int:pk>',views.booking_approve, name="booking_approve"),

在此处输入图像描述

在此处输入图像描述

标签: pythondjangodjango-modelsdjango-views

解决方案


至少我们现在知道,404 错误来自未找到的 pk,这很好。至少有两个问题: 1. 没有保存任何更改。2.调用了错误的pk。第一个问题很容易解决。这里的问题是,您调用模型对象并保存它,但您没有进行任何更改。因此,您需要包括类似

booking.b_price= = request.POST['new_price'] 

这样,您的带有 pk=pk 的 Booking 对象将其属性 b_price 更改为新的给定值(在 booking.save() 之后)。当然,为此,您需要从您的 html 中发布一个名为“new_price”的值,例如:

<form method="POST" action="{% url 'Loader:booking_approve' pk=price.pk %}" enctype="multipart/form-data">
   {% csrf_token %}
   <input type="text" name="new_price" placeholder="New Price" />
   <input class="" type="submit" value="Change price" style="float: right;"/>
</form>

对于第二个问题,请确保 pk=price.pk 在您的 html 中给出正确的 pk。


推荐阅读