Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Crud帮助-更新和删除_Python_Django_Django Views_Crud_Django Urls - Fatal编程技术网

Python Django Crud帮助-更新和删除

Python Django Crud帮助-更新和删除,python,django,django-views,crud,django-urls,Python,Django,Django Views,Crud,Django Urls,我是django的新手,试图完成一个crud项目,但是我在更新和删除方面遇到了问题。我已经尝试了很多故障排除的方法,但我一直都没有找到答案。我已经为它的更新部分提供了错误消息。所以我在寻求建议 错误消息: 在/update/1处出现运行时错误 下面是URL、视图和html的代码 URL URL模式=[ path('admin/', admin.site.urls), path('add/', views.add, name="add"), path('', views.sho

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

错误消息: 在/update/1处出现运行时错误

下面是URL、视图和html的代码

URL URL模式=[

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"),    
def显示(请求):

def更新(请求、更新\u id):

def delete(请求,删除\u id):

**更新Html:** {%extends'base.html%} {%block content%}
更新 {%csrf_令牌%} 身份证件 名称 接触
更新记录 显示细节 {%endblock内容%} 非常感谢您的指导,也许我没有看到什么。
提前感谢您是否有关于该错误的更多信息,或者“RuntimeError at/update/1”是您得到的所有输出

在任何情况下,我都会尽力帮助:

  • 对于您的更新视图,我会采取不同的做法: 我通常使用get_object_或_404来在找不到给定模型实例的情况下引发错误。然后我会进行条件检查,查看请求是否为POST(用户已将更新表单数据发送到服务器),或者是否为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)
    
  • 对于你删除视图的过程是类似的,我会再次使用用户获取对象或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入门,还有一件事你可以看看这本书:

    项目部分>Web应用程序在那里,您会发现Django上使用基于函数的视图制作的教程应用程序,并且比Django原始文档解释得更好。

    我认为更新不会使用form.save()。有一种方法可以更新数据库中的实例
    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})
    
    student = Student.objects.get(id=delete_id)
    student.delete()
    return HttpResponseRedirect('/')
    
    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)
    
    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, {})