【问题标题】:Django Show selected data from database based on user input in htmlDjango根据用户在html中的输入显示从数据库中选择的数据
【发布时间】:2019-05-03 09:12:03
【问题描述】:

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

谁能帮帮我

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

这是我的models.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 时,我希望结果会显示表号、项目和数量。但是除了后退按钮什么都不显示。

【问题讨论】:

  • 你在哪里输入ID?
  • 我将其声明为 OrderId,它将生成 5 个随机 id
  • 这不是我问的。 在哪里输入?它是如何到达see_order 视图的?其他值(数量、项目、table_no)等在哪里输入?
  • 随机ID是什么意思?这怎么可能是随机的?
  • @DanielRoseman 我在另一个 html 页面中使用文本字段。客户假设输入随机id并点击提交按钮,就会显示他们的订单

标签: html django database input


【解决方案1】:

你的逻辑毫无意义。

您进行了大量查询,但忽略了它们的结果 - 您要么对变量不做任何事情,要么用下一个查询的结果覆盖现有变量。

例如,你得到summary,出于某种原因(你为什么不在模板中这样做)将它包装在“h1”标签中以得到一个名为html的变量,然后完全忽略那个变量。

对于其余部分,您可以通过过滤 Item 得到名为 so 的内容,然后 覆盖 使用基于 Qty 的完全不同的过滤器,然后是 Status,等等。

更不用说,if(OrderId==OrderId) 完全没有意义。

你应该删除所有无用的逻辑。既然要按 OrderId 进行过滤,就应该这样做,然后将数据返回到数据库。

if request.method == "POST":
    OrderId = request.POST.get("OrderId")
    so = OrderItem.objects.filter(OrderId=OrderId)
    return render(request, 'restaurants/see_order.html', {'so': so})

【讨论】:

  • 感谢您的回复。我已经删除并按照您的指示进行更改。但它仍然只显示后退按钮
  • 您的模板应该遍历so,而不是so1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
相关资源
最近更新 更多