Выберите данные из выпадающего списка и сохраните их в базе данных в Django.

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

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

модели.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)

просмотры.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 из этого раскрывающегося списка, нажать кнопку «Сохранить» и обновить базу данных.


person Eve11    schedule 18.05.2019    source источник


Ответы (2)


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

person Gasanov    schedule 18.05.2019
comment
Спасибо за ваш ответ. как отображать приготовленное, заказано и т. д. в шаблоне вместо отображения 1, 2, 3 или 4? - person Eve11; 18.05.2019
comment
я имею в виду, что при извлечении данных на другой странице они будут показывать 1,2,3 или 4 вместо приготовленного, заказанного, готового к подаче и выполненного. - person Eve11; 18.05.2019
comment
Какие данные вы извлекаете? Предоставьте код, как вы это делаете. - person Gasanov; 18.05.2019
comment
Я изменил views.py и шаблон. Пожалуйста, обратитесь к этим кодам - person Eve11; 18.05.2019
comment
Вы имеете в виду, что хотите увидеть шаблон customer_order? - person Eve11; 18.05.2019
comment
Ваше представление предоставляет контекст только с so, но в вашем шаблоне вы используете chef_view. И это только для метода POST. Кроме того, у вас нет моего кода. Что вы пробовали? - person Gasanov; 18.05.2019
comment
ваш код находится в другом шаблоне и функции - person Eve11; 18.05.2019
comment
следовательно, вы знаете, как показать приготовленное и т. д. вместо 1,2,3,4 в шаблоне see_order? потому что он также извлекает данные из базы данных OrderItem - person Eve11; 18.05.2019
comment
Это верно для обоих случаев. Внимательно прочитайте мой ответ. - person Gasanov; 18.05.2019

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

person Umair Mohammad    schedule 18.05.2019