django开发之咬文嚼字

2022-04-15 16:22:53 浏览数 (1)

最近在写一个资讯管理的django项目

其中有一个需求是实现对资讯文章的修改

我简单的说一下逻辑那么就是

  1. 前端发起请求,加上某个资讯的id传给后台
  2. 后台收到请求,根据id去数据库中找到这一篇资讯文章
  3. 找到之后如果是get请求的话,那么把这篇文章的对应的信息渲染到前端
  4. 然后这时候就可以修改了,比如我修改某一篇资讯的标题然后点击确定
  5. 后端收到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]

这样就可以成功的取到我们的文章信息了

最后来一张图:

0 人点赞