Django 功能更新

问题描述 投票:0回答:1

我正在执行更新功能,但收到一条消息找不到页面

在此输入图片描述

views.py

def detalle_tarea(request, tarea_id):
  if request.method == 'GET':
       tarea = get_object_or_404(Tarea, pk=tarea_id)
       form = TareaForm(instance=tarea)
       return render(request, 'tarea_detalles.html', 
                {'tarea': tarea, 'form': form})
  else:
      tarea = get_object_or_404(Tarea, pk=tarea_id)
      form = TareaForm(request.POST, instance=tarea)
      form.save()
      return redirect('tareas')

url.py

from django.contrib import admin
from django.urls import path
from tareas import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.inicio, name='inicio'),
    path('registrar/', views.registrar, name='registrar'),
    path('tareas/', views.tareas, name='tareas'),
    path('tareas/crear/', views.crear_tarea, name='crear_tarea'),
    path('tareas/<int:tarea_id>/', views.detalle_tarea, name='detalle_tarea')
]

有什么建议吗???

python python-3.x django
1个回答
0
投票

您的屏幕截图中的错误很可能是因为您在 HTML 模板中错误地指定了

action
中的
<form>

但是除了这个错误之外,您的代码中还有一些其他不清楚的地方需要解决。

首先,重复是不必要的——它根本毫无意义。 其次,您没有验证表单并立即开始保存它 - 这也可能导致不愉快的后果。

我会像这样重写你的视图函数:

def detalle_tarea(request, tarea_id):
  # eliminating duplication
  tarea = get_object_or_404(Tarea, pk=tarea_id)

  if request.method == 'GET':
       form = TareaForm(instance=tarea)
       return render(request, 'tarea_detalles.html', 
                {'tarea': tarea, 'form': form})
  else:
      form = TareaForm(request.POST, instance=tarea)
      if form.is_valid():
        form.save()
        return redirect('tareas')
      else:
          # for example
          messages.error(request, "Validation error") 

我还建议使用

print
logging
进行调试,这样您就可以了解您是否真正使用了视图函数以及您得到了什么
tarea_id

例如:

def detalle_tarea(request, tarea_id):
    print(f'{tarea_id=}')
© www.soinside.com 2019 - 2024. All rights reserved.