Выберите данные из выпадающего списка и сохраните их в базе данных в Django - PullRequest
0 голосов
/ 18 мая 2019

Я новичок в Джанго.Я хочу показать food_status в раскрывающемся списке параметров, поэтому шеф-повар может выбрать один из них, изменить его и обновить в базе данных.Он может быть обновлен в базе данных, но я не уверен, как отобразить раскрывающийся список на основе шаблона на основе food_status, который у меня есть в models.py.

Кто-нибудь знает, как это сделать?

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 голосов
/ 18 мая 2019

Вы можете отобразить варианты, используя цикл {% 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 method.
Добавлен тег {% if %} для предварительного выбора правильной опции.
Подумайте о переключении на Forms, чтобы он мог автоматически обрабатывать поля рендеринга. (!!!)
Попробуйте вместо этого переключить food_status на IntegerField.Укажите атрибут default, поэтому он всегда будет одним из вариантов, даже если он не указан.

0 голосов
/ 18 мая 2019

Попробуйте использовать choices атрибут полей Django https://docs.djangoproject.com/en/2.0/ref/models/fields/#choices

...