找不到Django页面(404)请求方法:没有Sales匹配给定的查询

时间:2018-01-25 14:23:21

标签: python html django

我的python代码一直返回以下错误:

  

找不到页面(404)请求方法:GET请求URL:     http://127.0.0.1:8000/geo_gas/edit_sale/提出者:     geo_gas.views.edit_sale没有Sales与给定查询匹配。

class Sales(models.Model):
        gas_qty = models.CharField(max_length=20)
        amount = models.CharField(max_length=20)
        date_added = models.DateTimeField(auto_now_add=True)

        def __str__(self):
        """Return a string representation of the model."""
            return self.gas_qty

        class Meta:
            verbose_name_plural = 'Sales'

View.py

    def edit_sale(request):
        """Edit an existing sales record."""
        entry = get_object_or_404(Sales, pk=1)

        if request.method != 'POST':
            form = SalesForm(instance=entry)
        else:
            form = SalesForm(instance=entry, data=request.POST)
            if form.is_valid():
                form.save()
                return HttpResponseRedirect(reverse('geo_gas:sales'))

        context = {'entry': entry, 'form': form}
        return render(request, 'ht/edit_sale.html', context)

Urls.py

    .......

    # Page for editing a sale entry
        path('edit_sale/', views.edit_sale, name='edit_sale'),

    .......

HT /模板/ HT / edit_sale.html

编辑条目:

             <form action="{% url 'geo_gas:edit_entry' %}" method='post'>

            {% csrf_token %}

            {{ form.as_p }}

        <button name="submit">save changes</button>

         </form>

我无法确定代码的哪个部分导致错误发生。

1 个答案:

答案 0 :(得分:1)

错误是没有存在pk = 1的Sales实例,因为get_object_or_404(Sales, pk=1)可能引发错误。所以你可能想检查是否真的如此。

您可以尝试通过Sales.objects.first().pk查看实例的pk来查看。

更新:如何使其动态

在进入之前,了解RESTful API端点是什么样的可能很有用。但在这种情况下,您可能希望得到类似这样的内容

# urls.py
path('sale/', views.list_sale, name='list_sale'),
path('sale/<int:pk>/', views.retrieve_update_delete_sale, name='retrieve_update_delete_sale')  # names of the view can be whatever you want

这里发生的是pk参数从URL(<int:pk>)传递到视图,作为基于函数的视图中的参数。

访问视图中的网址传递的参数

def retrieve_update_delete_sale(request, pk):  # <-- you will be able to access it here
    """Edit an existing sales record."""
    entry = get_object_or_404(Sales, pk=pk)  # this is now dynamic!

    if request.method != 'POST':
        form = SalesForm(instance=entry)
    else:
        form = SalesForm(instance=entry, data=request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('geo_gas:sales'))

    context = {'entry': entry, 'form': form}
    return render(request, 'ht/edit_sale.html', context)

现在,如果您想使用pk=1访问Sale实例,您只需访问包含/sale/1/的网址,依此类推。