【问题标题】:Select data from drop-down list and save it to database in Django从下拉列表中选择数据并将其保存到 Django 中的数据库
【发布时间】:2019-05-18 07:37:29
【问题描述】:

我是 Django 的新手。我想在下拉列表选项中显示 food_status,因此厨师可以选择其中一个,更改它,并将其更新到数据库中。它可以更新到数据库中,但我不确定如何根据我在 models.py 中的 food_status 在模板上显示下拉列表。

有人知道怎么做吗?

模型.py

class OrderItem(models.Model):
    Table_No = models.IntegerField(blank=False)
    FoodId = models.TextField()
    Item = models.TextField()
    Qty = models.DecimalField(max_digits=5, decimal_places=0)
    Price = models.DecimalField(max_digits=10, decimal_places=2)
    TotalPrice = models.TextField()
    Note = models.TextField(max_length=100, null=True)
    OrderId = models.TextField(max_length=5, null=True)

    FoodStatus = (
        ('1', 'Has been ordered'),
        ('2', 'cooked'),
        ('3', 'ready to be served'),
        ('4', 'done'),
    )
    food_status = models.CharField(max_length=50, choices=FoodStatus)

views.py

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

see_order.html

<form action="#" method="post">
<style>
table, th, td {
    border: 1px solid black;
    table-layout: fixed ;
    height: "2000" ;
    width: "2000" ;
}
</style>
    {% csrf_token %}                                
    {% for order in so %}                           
    <table>                                     
        <tr>
            <th>Table Number</th>               
            <th>Item</th>                       
            <th>Quantity</th>                   
            <th>Status</th>                     
            <th>Order Id</th>                   
        </tr>   
        <tr>
            <td>{{ order.Table_No }}</td>       
            <td>{{ order.Item }}</td>           
            <td>{{ order.Qty }}</td>            
            <td>{{ order.food_status }}</td>    
            <td>{{ order.OrderId }}</td>        
        </tr>
    {% endfor %}
    </table>
<br><input action="action" onclick="window.history.go(-1); return false;" type="button" value="Back"></br>
</form>

kitchen_page 模板应该显示下拉列表,然后厨师可以从下拉列表中选择 food_status,点击保存按钮,然后更新数据库。

【问题讨论】:

    标签: django django-queryset modelchoicefield


    【解决方案1】:

    您可以使用{% for %} 循环和FoodStatus 选择列表来呈现选择,如下所示:

    <td>
        {{ order.get_food_status_display }}
        <select name="food_status">
            {% for id, choice in order.FoodStatus %}
                <option value="{{ id }}"{% if order.food_status == id %} selected="selected"{% endif %}>{{ choice }}</option>
            {% endfor %}
        </select>
    </td>
    

    您可以使用 get_FOO_display 方法显示实际状态文本(而不是 id)。
    添加了{% if %} 标签以预选正确的选项。
    考虑切换到Forms,以便它可以自动处理渲染字段。(!!!)
    考虑将food_status 改为IntegerField。提供default 属性,因此它始终是选项之一,即使未指定。

    【讨论】:

    • 感谢您的回复。如何在模板中显示“cooked”、“已订购”等而不是显示 1、2、3 或 4?
    • 我的意思是当在另一个页面上检索数据时,它将显示 1、2、3 或 4,而不是“煮熟”、“已订购”、“准备上菜”和“完成”
    • 您检索哪些数据?提供代码你是怎么做的。
    • 我更改了views.py 和模板。请参考那些代码
    • 您的意思是要查看customer_order 模板吗?
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多