我是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,单击“保存”按钮,然后更新数据库。
答案 0 :(得分:0)
尝试使用Django字段https://docs.djangoproject.com/en/2.0/ref/models/fields/#choices的choices
属性
答案 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
属性,因此即使未指定,它也始终是选择之一。