从下拉列表中选择数据并将其保存到Django中的数据库

时间:2019-05-18 07:37:30

标签: django django-queryset modelchoicefield

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

有人知道怎么做吗?

models.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,单击“保存”按钮,然后更新数据库。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可以使用{% 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属性,因此即使未指定,它也始终是选择之一。