代码之家  ›  专栏  ›  技术社区  ›  Andres Vilca

Django函数更新

  •  0
  • Andres Vilca  · 技术社区  · 6 月前

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

    enter image description here

    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')
    ]
    

    有什么建议吗???

    1 回复  |  直到 6 月前
        1
  •  0
  •   Medvedev    6 月前

    屏幕截图中的错误很可能是因为您错误地指定了 action 在里面 <form> 在您的HTML模板中。

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

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

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

    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=}')