Django根据html中的用户输入显示从数据库中选择的数据

时间:2019-05-03 09:12:03

标签: html django database input

我是新手。 我使用Django创建餐厅系统。我想显示已插入数据库的数据(表号,食物的数量和数量)。我想显示基于客户在订购食物时生成的随机ID的数据。因此,我不知道该怎么做。

任何人都可以帮助我

我已经尝试过这些代码,但是只显示后退按钮。我无法根据数据库中的随机ID检索数据

这是我的模型。py

class OrderItem(models.Model):
    Table_No = models.IntegerField(blank=False)
    Item = models.TextField()
    Qty = models.IntegerField(blank=False)
    Price = models.TextField()
    Status = models.TextField(max_length=100, null=True)
    OrderId = models.TextField(max_length=100, null=True)

我的html文件:

<form action="" method="post">
    {% csrf_token %}
    <!--<input type="Submit" name="submit" value="See Order"/>-->
            {% for order in so1 %}
            <table width="800">
                <tr>
                    <th width="800">Table Number</th>
                    <th width="800">Item</th>
                    <th width="800">Quantity</th>
                    <th width="800">Status</th>
                    <th width="800">Order Id</th>
                </tr>
                <tr>
                    <td width="800">{{ order.Table_No }}</td>
                    <td width="800">{{ order.Item }}</td>
                    <td width="800">{{ order.Qty }}</td>
                    <td width="800">{{ order.Status }}</td>
                    <td width="800">{{ order.OrderId }}</td>
                </tr>
            {% endfor %}
    <input action="action" onclick="window.history.go(-1); return false;" type="button" value="Back" />

我的观点:

def see_order(request):
    if request.method == "POST":
        Table_No = request.POST.get("Table_No")
        Item = request.POST.get("Item")
        Qty = request.POST.get("Qty")
        Status = request.POST.get("Status")
        OrderId = request.POST.get("OrderId")
        track_order = request.POST.get('textfield', None)

        if(OrderItem.objects.get(OrderId)):
            if(OrderId==OrderId): 
                try:
                    summary = OrderItem.objects.get(OrderId=track_order)
                    so1 = OrderItem.objects.filter(Table_No=Table_No)
                    so = OrderItem.objects.filter(Item=Item)
                    so = OrderItem.objects.filter(Qty=Qty)
                    so = OrderItem.objects.filter(Status=Status)
                    so = OrderItem.objects.filter(OrderId=OrderId)
                    html = ("<H1>%s</H1>", summary)
                    return render(request, 'restaurants/see_order.html', {'so1': so1 , 'so': so})
                except OrderItem.DoesNotExist:
                    return HttpResponse("no such user")
    else:
        return render(request, 'restaurants/customer_page.html')

我希望当我输入随机ID时结果将显示表号,项目和数量。但是除了“后退”按钮外,它什么也没有显示。

1 个答案:

答案 0 :(得分:0)

您的逻辑没有道理。

您进行了大量查询,但忽略了它们的结果-您完全不对变量进行任何操作,或者用下一个查询的结果覆盖现有变量。

例如,您得到const indexArray = []; const bigArrayIndiciesByNameAndId = bigArray.reduce((a, { name, id }, i) => { a[name + '_' + id] = i; return a; }, {}); smallArray.forEach(ele => { const keyToFind = ele.name + '_' + ele.id; const foundIndex = bigArrayIndiciesByNameAndId[keyToFind]; if (foundIndex) { indexArray.push(foundIndex); } }); ,出于某种原因(为什么不在模板中这样做)将其包装在“ h1”标签中,以获得名为summary的变量,然后< em>完全忽略该变量。

对于其他情况,通过对html进行过滤,然后使用基于so的完全不同的过滤器进行覆盖,从而得到Item,然后{ {1}},等等。

更不用说,Qty毫无意义。

您应该删除所有无用的逻辑。由于您要按OrderId进行过滤,因此您应该这样做,然后将数据返回数据库。

Status