编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

项目实战Django Web开发进阶-13-编辑 Form 表单

wxchong 2024-07-22 22:42:52 开源技术 12 ℃ 0 评论

已经实现了点餐数据的创建和删除,这里将继续实现点餐数据的编辑功能,当然根据需求登录者只能编辑自己提交的点餐数据。

首先将 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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表