Может ли Django обрабатывать два последовательных запроса связанных постов? И ввод данных из первого сообщения будет сохранен и использован для второго сообщения

Я пытался создать веб-приложение, которое возвращает калории типа продуктов питания. Я использую API для получения информации и представления ее пользователям. После просмотра результата, если пользователь решит, что он/она хочет сохранить эту информацию о еде в наборе данных для дальнейшего использования, он сохранит ее. Я хочу, чтобы весь этот процесс был завернут в один шаблон и одну основу представления, и я пробовал сделать что-то вроде этого:

Моя модель:

 class Ingredient(models.Model):
    MEASUREMENT=[('ml','ml'),
                 ('gram','gram')]
    name=models.CharField(blank=False, max_length=200)
    quantity=models.DecimalField(blank=False, max_digits=8,decimal_places=0,default=100)
    measure=models.CharField(blank=False,max_length=4,choices=MEASUREMENT,default='gram')
    calories=models.DecimalField(blank=False,null=False,decimal_places=2,max_digits=8,default=0)


    def __str__(self):
        return self.name

Мои взгляды:

from django.shortcuts import render
from django.http.response import HttpResponseRedirect, HttpResponse
from .models import Ingredient
from .forms import IngredientForm
import requests, json
import requests
import json

api_url = 'https://api.calorieninjas.com/v1/nutrition?query='

def ingredient_form(request):
    add=False
    kcal=0
    if request.method == 'POST':
        name=str(request.POST.get('name'))
        if Ingredient.objects.filter(name=name).exists():
            track=Ingredient.objects.filter(name=name)
            add=True
            for val in track:
                if val.measure==str(request.POST.get('measure')):
                    add=False
                    amount=float(request.POST.get('quantity'))
                    kcal=(amount/float(val.quantity))*float(val.calories)
                    break
            if add==True:
                query = str(request.POST.get('quantity')) + ' '+str(request.POST.get('measure'))+' ' + str(request.POST.get('name'))
                response = requests.get(api_url + query, headers={'X-Api-Key': 'ZwDpQLeGgrYKVgNd7UE7/Q==ZwxlN5PK4cfBMhua'})
                data = response.json()
                if len(data['items'])==0:
                    return HttpResponse('Does not exits')
                else:
                    kcal = float(data['items'][0]['calories'])

                
        else:
            add=True
            query = str(request.POST.get('quantity')) + ' '+str(request.POST.get('measure'))+' ' + str(request.POST.get('name'))
            response = requests.get(api_url + query, headers={'X-Api-Key': 'ZwDpQLeGgrYKVgNd7UE7/Q==ZwxlN5PK4cfBMhua'})
            data = response.json()
            if len(data['items'])==0:
                 return HttpResponse('Does not exits')
            else:
                kcal = float(data['items'][0]['calories'])
    if add==True and request.POST.get('subject') == 'yes':
        k=kcal/float(request.POST.get('quantity'))*100
        form=Ingredient(name=str(request.POST.get('name')),measure=request.POST.get('measure'),calories=k)
        form.save()       

        return render(request, 'nutrition/ingredient.html',{'kcal':kcal,'add':add})
    else:
        return render(request, 'nutrition/ingredient.html',{'kcal':kcal,'add':add})

Мой шаблон (nutrition/ingredient.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ingredient-Add</title>
</head>
<body>
<form action="" method="POST">
{% csrf_token %}
<label for="fname">Name:</label><br>
  <input type="text" id="fname" name="name"><br>
    {% csrf_token %}
  <label for="lname">Quantity:</label><br>
  <input type="text" id="lname" name="quantity">
  {% csrf_token %}
  <p>Please select the measurement:</p>
    <input type="radio" id="gram" name="measure" value="gram">
    <label for="gram">Gram</label><br>
    <input type="radio" id="ml" name="measure" value="ml">
    <label for="ml">ML</label><br>
  <br>
  <br>
 <button class=" btn btn-outline-secondary " type="submit" name='form'>Submit</button>
</form>
{% if kcal %}
kcal: {{kcal}}
{% endif %}
<br>
<br>
{% if add == True %}
  Do you want to add this ingredient to your dataset?
  <input class='btn btn-primary' name="subject" type="submit" value="yes">Yes</button>
  <input class='btn btn-primary' name="subject" type="submit" value="no">No</button>
{% endif %}
</body>
</html>

Я знаю, что функция просмотра и шаблон вполне достигли того, что я пытался сделать, но я не знаю, как это исправить. Не могли бы вы быть настолько любезны, чтобы показать мне как? Заранее спасибо!

Вернуться на верх