Django. Форма возвращает Select a valid choice
Только начал изучать Django, так что не ругайтесь. Как сделать правильно? Есть модель данных
from django.db import models
from cookroom.models import Dish
from .other import get_dish_list
class CustomerOrder(models.Model):
"""Модель клиентского заказа"""
dishs = get_dish_list()
name = models.CharField(max_length=100)
phone = models.CharField(max_length=20)
email = models.CharField(max_length=100)
dish = models.CharField(max_length=200,choices=dishs, default=dishs[0][0])
quantity = models.CharField(max_length=10)
def __str__(self):
return self.name
Цель - получить из модели данных Dish все названия, что бы добавить в форме списка в choices. Сделал это через функцию get_dish_list() other.py
from django.db import models
from cookroom.models import Dish
def get_dish_list():
data =[]
dishs = Dish.objects.all()
for dish in dishs:
data.append((dish.id,dish.dish),)
return data
Проблема в чем - все подтягивается и в шаблоне все названия товаров отражаются, но при попытке сохранить в браузере выдает Select a valid choice. 2 is not one of the available choices. Так само и ведет себя в админке. Модель Dish
from django.db import models
class Dish(models.Model):
"""Модель данных для блюда"""
dish = models.CharField(max_length=200)
description = models.TextField()
price = models.CharField(max_length=10)
quantity = models.CharField(max_length=10)
def __str__(self):
"""Возвращает текстовое представление модели"""
return self.dish
views.py
from django.shortcuts import render
from django.urls import reverse
from django.http import HttpResponseRedirect, Http404
from .models import CustomerOrder
from .forms import CustomerOrderForm
def new_order(request):
"""Страница нового заказа"""
if request.method != 'POST':
form = CustomerOrderForm()
else:
form = CustomerOrderForm(data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('for_clients:index'))
context = {'form':form}
return render(request,'for_clients/new_order.html',context)
Форма
from django import forms
from .models import CustomerOrder
class CustomerOrderForm(forms.ModelForm):
"""Класс формы для клиентского заказа"""
class Meta:
model = CustomerOrder
fields = '__all__'
шаблон
{% extends "for_clients/base.html" %}
{% block content %}
<h1>Блок клиентского заказа</h1>
<form action="{% url 'for_clients:new_order' %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
<button name='submit'>Добавить</button>
</form>
{% endblock content %}
И ошибок никаких не вылетает, просто
[12/Feb/2020 13:31:27] "POST /new_order/ HTTP/1.1" 200 1605
Я так понимаю, что то идет не так во views, не проходит валидацию формы,почему? Пробовал через shell - все работает, все сохраняется. И как совсем начинающий, такой вопрос - какой способ более рациональный для решения этой задачи?