最近在写一个资讯管理的django项目
其中有一个需求是实现对资讯文章的修改
我简单的说一下逻辑那么就是
- 前端发起请求,加上某个资讯的id传给后台
- 后台收到请求,根据id去数据库中找到这一篇资讯文章
- 找到之后如果是get请求的话,那么把这篇文章的对应的信息渲染到前端
- 然后这时候就可以修改了,比如我修改某一篇资讯的标题然后点击确定
- 后端收到post请求,重写刚才的资讯文章并且修改标题,然后保存
这么说起来倒是没什么问题
可是实现的时候却出了一个大问题
就是没办法将我们取到的那个资讯的信息渲染到前端
起初我以为是因为前端传id的问题
因为js是仿照别别的修改功能写的所以不是很确定对不对
既然不确定就慢慢调试吧
然后在后端输出一下id
结果发现取到了
这时候就觉得不是前端传id 的问题
然后就着手从后端找问题
后端起初的代码是这样的:
代码语言:javascript复制def memberedit(request):
if request.method == 'GET':
id = request.GET.get('id')
member = Member.objects.filter(id=id)
return render(request, 'member-edit.html', {'member': member})
else:
id=request.POST.get('id')
username = request.POST.get("username")
pwd = request.POST.get("pwd")
sex = request.POST.get("sex")
phone = request.POST.get('phone')
email = request.POST.get('email')
address = request.POST.get('address')
introduction = request.POST.get('introduction')
memeber = Member.objects.filter(id=id)[0]
memeber.username = username
memeber.password=pwd
memeber.sex=sex
memeber.phone=phone
memeber.emali=email
memeber.address=address
memeber.introduction=introduction
memeber.save()
return HttpResponse("修改成功!")
最终通过多方调试
改成了这种样子的然后就可以成功渲染了
代码语言:javascript复制def memberedit(request):
if request.method == 'GET':
id = request.GET.get('id')
member = Member.objects.get(id=id)
return render(request, 'member-edit.html', {'member': member})
else:
id=request.POST.get('id')
username = request.POST.get("username")
pwd = request.POST.get("pwd")
sex = request.POST.get("sex")
phone = request.POST.get('phone')
email = request.POST.get('email')
address = request.POST.get('address')
introduction = request.POST.get('introduction')
memeber = Member.objects.filter(id=id)[0]
memeber.username = username
memeber.password=pwd
memeber.sex=sex
memeber.phone=phone
memeber.emali=email
memeber.address=address
memeber.introduction=introduction
memeber.save()
return HttpResponse("修改成功!")
对其实就把
member = Member.objects.get(id=id)
之前是的filter改成get就没毛病了
他两都是筛选的意思 为啥就不一样呢
今天就来咬文嚼字一下
django的get是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。
django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。
所以 要想获取某一篇文章就用get或者filter(id=id)[0]
这样就可以成功的取到我们的文章信息了
最后来一张图: