Django Rest Framework разрешает запросы по умолчанию application/json
или application/x-www-form-urlencoded
, и если вы не напишите свой собственный анализатор text/plain
(в документах есть пример ), запрос text/plain
будет отклонено.
Однако я бы посоветовал вам не пытаться делать это. Вместо того, чтобы пытаться отправить JSON в качестве значения каждого параметра выбора в форме с использованием обычного текстового кодирования, это было бы гораздо более разумно для используйте первичный ключ каждого объекта Food
, а затем найдите объект Food
в представлении, используя первичный ключ. После поиска вы можете получить калории и любые другие данные.
Таким образом, в форме удалите enctype="text/plain"
и измените способ построения раскрывающегося списка, чтобы использовать первичный ключ Food
:
<select name='starter'>
{% for food in foods %}
{% if food.type == 'starter' %}
<option value="{{ food.pk }}">{{ food.display_name }} </option>
{% endif %}
{% endfor %}
</select>
Сделайте то же самое для других выпадающих меню для блюда и пустыни.
Затем измените представление на что-то вроде этого:
@api_view(["POST"])
def FoodResponse(request):
try:
#defining variables
calMoy=500
percentage=0.1
calSum=0
# Lookup the food objects up using the primary key
starter = Food.objects.get(pk=request.POST['starter'])
dish = Food.objects.get(pk=request.POST['dish'])
desert = Food.objects.get(pk=request.POST['desert'])
# Retrieve the calories and calculate the total
calSum= calSum + starter.cal+ dish.cal + desert.cal
...