【问题标题】:Django Crud Help - Update and DeleteDjango Crud 帮助 - 更新和删除
【发布时间】:2021-07-15 17:18:41
【问题描述】:

我是 django 的新手,正在尝试完成一个 crud 项目,但是我在更新和删除方面遇到了问题。我已经尝试了多种故障排除方法,但我一直在做空。我已经为它的更新部分提供了错误消息。所以我正在寻求建议。

错误信息: /update/1 处的运行时错误

下面是 url、views 和 html 的代码。

网址 urlpatterns = [

path('admin/', admin.site.urls),
path('add/', views.add, name="add"),
path('', views.show, name="show"),
path('update/<update_id>/', views.update, name="update"),
path('delete/<delete_id>/', views.delete, name="delete"),    

]

观看次数

定义添加(请求):

form = StudentForm(request.POST or None)
#student = Student.objects.all()
if form.is_valid():
    form.save()
return render(request, 'add.html', {'form': form})

def 显示(请求):

student = Student.objects.all()
return render(request, 'show.html', {'student': student})

def update(request,update_id):

student = Student.objects.get(id=update_id)
form = StudentForm(request.POST, instance=student)
if form.is_valid():
    form.save()
    return HttpResponseRedirect('/')
return render(request, 'update.html', {'student':student})

def delete(request,delete_id):

student = Student.objects.get(id=delete_id)
student.delete()
return HttpResponseRedirect('/')
**更新HTML:** {% 扩展 'base.html' %} {% 块内容 %}
更新 {% csrf_token %} ID 姓名 接触
更新记录 显示详细资料 {% endblock 内容 %} 非常感谢您的指导,也许我没有看到任何东西。 先感谢您

【问题讨论】:

  • 我认为更新不会使用 form.save()。有一种方法可以更新数据库中的实例

标签: python django django-views crud django-urls


【解决方案1】:

你有更多关于错误的信息还是“RuntimeError at /update/1”你得到的所有输出?

无论如何我都会尽力帮忙的:

  1. 对于您的更新视图,我会采取不同的做法: 如果找不到给定的模型实例,我通常使用 get_object_or_404 来引发错误。然后我会做一个条件检查,看看请求是 POST(用户已将更新表单数据发送到服务器)还是 GET,用户刚刚在更新数据之前请求了表单。

据我所知,您没有考虑 GET。表格也应包含在上下文中。我

这就是我的更新函数的样子:

def update_student(request, update_id):
    student = get_object_or_404(student, id=update_id)

    if request.method != 'POST':
        form = StudentForm(instance=student)

    else:
        form = StudentForm(instance=student, data=request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/')

    context = {'form': form, 'student': student}
    return render(request, 'update.html', context)
  1. 对于你删除视图的过程是类似的,我会再次用户get_object_or_404。我会确保请求是 POST,否则无需删除并在最后返回 render(request, template, {}) 以正确呈现页面。我看到你没有在你的函数中传递一个模板,你需要。

这就是我将如何执行删除功能:

def delete(request, delete_id):
    template = 'delete.html'
    student = get_object_or_404(student, id=delete_id)

    if request.method == 'POST':
        student.delete()
        return HttpResponseRedirect('/')

    return render(request, template, {})

对于一个伟大的初学者在 Django 中基于函数的视图的 CRUD 介绍还有一件事,你可以查看这本书:http://bedford-computing.co.uk/learning/wp-content/uploads/2015/10/No.Starch.Python.Oct_.2015.ISBN_.1593276036.pdf

Project Section > Web Applications 在那里你会发现一个使用基于函数的视图在 Django 上制作的教程应用程序,并且比原始的 django 文档解释得更好。

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2019-12-16
    • 1970-01-01
    相关资源
    最近更新 更多