DJANGO-天天生鲜项目从0到1-014-订单-订单评论
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习
https://www.bilibili.com/video/BV1vt41147K8?p=1
编辑用户订单页面JS
根据订单状态显示下一步操作是什么,若用户点击‘去评价’,则通过 location.href= '/order/comment/'+order_id 访问订单评价url
//根据订单状态显示下一步操作
$('.oper_btn').each(function(){
status = $(this).attr('order_status')
if (status == '1'){
oper_show = '去支付'
}
else if (status =='4'){
oper_show = '去评价'
}
else{
oper_show = $(this).attr('status_name')
}
$(this).text(oper_show)
})
//去支付按钮
$('.oper_btn').click(function(){
//获取订单ID
order_id = $(this).attr('order_id')
//若状态为待支付,则发送ajax支付请求
if ($(this).attr('order_status') =='1'){
pay_method = $(this).attr('pay_method')
send_pay_ajax(order_id, pay_method)
}
//若状态为待评价,则跳转到评价界面
else if($(this).attr('order_status') == '4'){
//跳转到评价页面
location.href = '/order/comment/'+order_id
}
})
添加评价URL和视图类
在apps/order/url.py中配置评价url
from order.views import OrderCommentView urlpatterns = [
...
path('comment/<int:order_id>/', OrderCommentView.as_view(), name='comment')
...
]
编辑apps/order/view.py,新增OrderCommentView
使用reverse反向解析时,若url中带有参数,则在reverse中的第二个参数加上kwargs参数,key为url参数名
class OrderCommentView(LoginRequiredMixin, View):
'''订单评价视图'''
template_name = 'order/order_comment.html'
def get(self, request, order_id):
'''显示评价页面'''
user = request.user
# 校验数据
if not order_id:
return redirect(reverse('user:order', kwargs={'page_num': 1}))
try:
order = OrderInfo.objects.get(id=order_id, user=user)
except OrderInfo.DoesNotExist:
return redirect(reverse('user:order', kwargs={'page_num': 1}))
# 获取订单商品
order_goods_list = OrderGoods.objects.filter(order=order)
for order_goods in order_goods_list:
order_goods.amount = order_goods.count * order_goods.price
# 动态赋值属性
order.status_name = OrderInfo.ORDER_STATUS_DIC[order.order_status]
order.order_goods_list = order_goods_list
return render(request, self.template_name, {'order': order})
编辑模板文件
{% extends 'base_user_center.html' %}
{% load static %}
{% block title %}天天生鲜-用户中心{% endblock %}
{% block page_title %}用户中心{% endblock page_title %}
{% block right %}
<div class="right_content clearfix">
<h3 class="common_title2">订单评价</h3>
<ul class="order_list_th w978 clearfix">
<li class="col01">{{ order.create_time }}</li>
<li class="col02">订单号:{{order.order_num}}</li>
<li class="col02 stress">{{order.status_name}}</li>
</ul>
<form method="post">
{% csrf_token %}
{# 订单id #}
<input type="hidden" name="order_id" value="{{order.order_id}}">
{# 订单中有几个商品 #}
<input type="hidden" name="total_count" value="{{order.order_goods_list|length}}">
{% for order_goods in order.order_goods_list %}
<table class="order_list_table w980">
<tbody>
<tr>
<td width="80%">
<ul class="order_goods_list clearfix">
<li class="col01"><img src="{{order_goods.goods.image.url }}"></li>
<li class="col02">{{order_goods.goods.name}}<em>{{order_goods.price}}/{{order_goods.goods.unite}}</em></li>
<li class="col03">{{order_goods.count}}</li>
</ul>
</td>
<td width="20%">{{order_goods.amount}}元</td>
</tr>
</tbody>
</table>
<div class="site_con">
<input type="hidden" name="goods_{{forloop.counter}}" value="{{order_goods.goods.id}}">
<div class="form_group form_group2">
<label>评价内容:</label>
<textarea class="site_area" name="content_{{forloop.counter}}"></textarea>
</div>
</div>
{% endfor %}
<input type="submit" name="" value="提交" class="info_submit">
</form>
</div>
{% endblock right %}
评价页面是该订单中每个商品下面都可以进行评价,因此在提交时,需要将输入框与对应的商品绑定,才能知道这个评价是哪个商品的。这里在每个评论框前面,新增了一个隐藏的input框,name为goods_{{forloop.counter}},value为{{order_goods.goods.id}},同时将评论框textarea的name也写成content_{{ forloop.counter }},input和textarea的name都使用了同一个“forloop.counter”来进行绑定,同时在循环商品前,也新增一个隐藏的input框将商品总数也传给了POST,这里的value="{{order.order_goods_list|length}}",使用了django模板的过滤器|length,还有其他的过滤器如:{{ value|add:"2" }}、{{ value|date:"D d M Y" }} {{ value|time:"H:i" }}、{{ value|lower }}等等。

提交评论调用post请求
继续编辑OrderCommitView,添加post方法
循环商品,通过循环计数i获取当前商品的id和评论
def post(self, request, order_id):
'''评价提交'''
user = request.user
# 获取数据
total_count = int(request.POST.get('total_count'))
# 校验数据
if not order_id:
return redirect(reverse('user:order', kwargs={'page_num': 1}))
try:
order = OrderInfo.objects.get(id=order_id, user=user)
except OrderInfo.DoesNotExist:
redirect(reverse('user:order', kwargs={'page_num': 1})) for i in range(1, total_count+1):
# 获取评论
comment = request.POST.get('content_%d' % i, '')
# 获取商品ID
goods_id = int(request.POST.get('goods_%d' % i))
try:
goods = OrderGoods.objects.get(order=order, goods_id=goods_id)
except Goods.DoesNotExist:
continue
goods.comment = comment
goods.save() order.order_status = 5 # 已完成
order.save() return redirect(reverse('user:order', kwargs={'page_num': 1}))
DJANGO-天天生鲜项目从0到1-014-订单-订单评论的更多相关文章
- django天天生鲜项目
.后台admin管理天天生鲜商品信息 models里 from django.db import modelsfrom tinymce.models import HTMLField #需要pip安装 ...
- DJANGO-天天生鲜项目从0到1-012-订单-用户订单页面
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-007-首页静态化与缓存
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- python 天天生鲜项目
python 天天生鲜项目 django版:https://github.com/Ivy-1996/fresh flask版:https://github.com/Ivy-1996/flask-fre ...
- Django之天天生鲜项目
准备工作 1.配置settings.py内置文件 注意: AUTH_USER_MODEL配置参数要在第一次迁移数据库之前配置,否则可能django的认证系统工作不正常 2.创建应用 3.配置主路由 一 ...
- DJANGO-天天生鲜项目从0到1-011-订单-订单提交和创建
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-010-购物车-购物车操作页面(勾选+删改)
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-009-购物车-Ajax实现添加至购物车功能
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-009-搜索功能实现(django-haystack+whoosh+jieba)
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- DJANGO-天天生鲜项目从0到1-006-首页-内容展示
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
随机推荐
- 一条update SQL语句是如何执行的
一条更新语句的执行过程和查询语句类似,更新的流程涉及两个日志:redo log(重做日志)和binlog(归档日志).比如我们要将ID(主键)=2这一行的值加(c:字段)1,SQL语句如下: upda ...
- 算法岗面试题:模型的bias和variance是什么?用随机森林举例
校招在即,准备准备一些面试可能会用到的东西吧.希望这次面试不会被挂. 基本概念 说到机器学习模型的误差,主要就是bias和variance. Bias:如果一个模型的训练错误大,然后验证错误和训练错误 ...
- IDEA创建SpringBoot的多模块项目教程
最近在写一个多模块的SpringBoot项目,基于过程总了一些总结,故把SpringBoot多个模块的项目创建记录下来. 首先,先建立一个父工程: (1)在IDEA工具栏选择File->New- ...
- python fabric安装
1 安装epel wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 2 安装pip yum i ...
- 谈反应式编程在服务端中的应用,数据库操作优化,提速 Upsert
反应式编程在客户端编程当中的应用相当广泛,而当前在服务端中的应用相对被提及较少.本篇将介绍如何在服务端编程中应用响应时编程来改进数据库操作的性能. 开篇就是结论 接续上一篇<谈反应式编程在服务端 ...
- Yolo训练自定义目标检测
Yolo训练自定义目标检测 参考darknet:https://pjreddie.com/darknet/yolo/ 1. 下载darknet 在 https://github.com/pjreddi ...
- day06获取用户名
可以通过微信内置的接口,调用微信名和微信图片 1.xxx.wxml ===================================== <button open-type="g ...
- innobackupex 数据库备份
一,安装innobackupex CentOS: yum install percona-xtrabackup 二,备份数据 备份: innobackupex --user=user --passwo ...
- 「疫期集训day11」沙漠
可恶的英格兰人,为了石油而攻打我们----岂能让他们得逞?----鄂斯曼帝国的士兵 今天整理日,不错不错 写了一天的DP,截一些较好的题: 收获: \(1.\) 对拍更熟练了,主要是线段和合并饭团两题 ...
- 什么?你还不会通过纯js提交表单?
如果程序已经封装好了, 不管后台是java .asp.net .还是php ?这个时候你的客户突然追加说我要 追加表单验证? what 妇产科 怎么办? submit 自带刷新效 ...