我的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>
我无法确定代码的哪个部分导致错误发生。
答案 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/
的网址,依此类推。