已经实现了点餐数据的创建和删除,这里将继续实现点餐数据的编辑功能,当然根据需求登录者只能编辑自己提交的点餐数据。
首先将 templates/order/createorder.html 修改成 create.html,其它的内容不变。
在 orders/views.py 中增加 EditOrder 函数,实现具体的编辑功能:
def EditOrder(request,order_id):
ticket = request.COOKIES.get('ticket')
if not ticket:
return HttpResponseRedirect('/users/login/')
user = User.objects.filter(ticket=ticket)
if not user:
return HttpResponseRedirect('/users/login/')
if request.method == 'POST':
# 创建 OrderForm 的实例
form = OrderForm(request.POST)
# check whether it's valid:
if form.is_valid():
# 获取用户输入
username = form.cleaned_data['username']
createdate = form.cleaned_data['createdate']
dish = form.cleaned_data['dish']
quantity = form.cleaned_data['quantity']
spicy = form.cleaned_data['spicy']
dinnertime = form.cleaned_data['dinnertime']
order = Order.objects.filter(id=order_id).first()
order.username = username
order.dish = dish
order.quantity = quantity
order.spicy = spicy
order.dinnertime = dinnertime
order.save()
return HttpResponseRedirect('/orders/')
else:
error_msg = form.errors.as_data()
render(request, 'orders/createorder.html', {'obj': form,'errors': error_msg,})
if request.method == 'GET':
# 根据 order_id 获取 order 数据
order = Order.objects.filter(id=order_id).first()
username = order.username
createdate = order.createdate
dish = order.dish
quantity = order.quantity
spicy = order.spicy
dinnertime = order.dinnertime
form = OrderForm(initial={"username": username,
'createdate':datetime.now().strftime('%Y-%m-%d'),
'dish':dish,
'quantity':quantity,
'spicy':spicy,
'dinnertime':dinnertime},)
return render(request, 'orders/create.html', {'obj': form, 'username':username })
在 orders/index.html 中进行判断,如果是登录者创建的数据,则增加“编辑”链接:
{% for order in orders %}
<tr>
<td>{{ order.id }}</td>
<td>{{ order.username }}</td>
<td>{{ order.createdate|date:'Y-m-d' }}</td>
<td>{{ order.dish }}</td>
<td>{{ order.dish.restaurant }}</td>
<td>{{ order.quantity }}</td>
<td>{{ order.get_spicy_display }}</td>
<td>{{ order.get_dinnertime_display }}</td> <!--显示中餐/午餐的value-->
<td>
{% if order.username == username %}
<a href="{% url 'orders:edit' order.id %}">编辑</a>
<a href="{% url 'orders:delete' order.id %}">删除</a>
{% endif %}
</td>
</tr>
{% endfor %}
在 order/urls.py 中增加 edit 的子路由:
from django.urls import path
from . import views
app_name = 'orders'
urlpatterns = [
# orders 的首页
path('', views.order, name='index'),
path('create/', views.CreateOrder, name='create'),
path('edit<int:order_id>/', views.EditOrder, name='edit'),
path('delete<int:order_id>/', views.DeleteOrder, name='delete'),
]
在浏览器中输入:http://127.0.0.1:8000/orders/ ,可以看到如下页面:
点击“编辑”,按钮,可以看到如下界面:
建议按照 项目实战Django Web开发-16-目录结构 的顺序进行学习 iorder 项目的开发过程。
源代码在 github 中:https://github.com/cybercampus/iOrder.git
本文暂时没有评论,来添加一个吧(●'◡'●)