Как заполнить форму Django ответом API?

Мне нужно создать форму персон, где имя лагеря должно получать ответ API. Я создал формуляр и отобразил api ответ в шаблоне, но я не могу поместить его в мой формуляр, чтобы сохранить в моих моделях название лагеря. Поэтому я просто хочу сохранить ответ API внутри моих форм и в моей базе данных.

Виды

def cadastro(request):
    url = 'https://gerador-nomes.herokuapp.com/nome/aleatorio'
    api = requests.get(url)
    nome_api = ' '.join(api.json())
    
    form = PessoaForm()
    form.nome = api
    if request.method == 'POST':

        form = PessoaForm(request.POST)
        if form.is_valid():
            form.cleaned_data('nome')
            form.save()
            return redirect('/')

    context = {'form': form, 'api': nome_api}
    return render(request, 'base/pessoa_form.html', context)

pessoa_form.html

<body>


    <form action="" method="post">

        {% csrf_token %}
        {{form}}

        <input type="submit" name="Cadastrar">
    </form>

</body>
</html>

Формы

from django.forms import ModelForm
from . models import Pessoa


class PessoaForm(ModelForm):
    class Meta:
        model = Pessoa
        fields = '__all__'

Модели

from django.db import models


class Pessoa(models.Model):
    name= models.CharField(max_length=255, null=True)
    lastname= models.CharField(max_length=255, null=True)
    age= models.IntegerField(null=True)
    birthday_date= models.DateField()
    email = models.CharField(max_length=255, null=True)
    nickname= models.CharField(max_length=255, null=True, blank=True)
    note = models.CharField(max_length=500, null=True, blank=True)  

    def __str__(self):
        return self.nome

    class Meta:
        ordering = ['nome', 'sobrenome']

Я пробовал некоторые вещи из моей головы, но ничего не сработало, например, попытка получить доступ к переменной Name в моих формах внутри моего шаблона и внутри моих представлений.

[английский] Ну, судя по выбранным вами именам переменных, я предполагаю, что вы бразилец, поэтому я опубликую ответ и на португальском. Я не знаю, является ли это лучшей практикой, но вы можете просто добавить ответ api в качестве нового поля в request.POST, например:

[Перевод с английского] По именам, которые вы использовали, я предполагаю, что вы BR, поэтому я буду отвечать на португальском языке в дополнение к английскому. Я не знаю, является ли это лучшим методом, но вы можете просто добавить ответ API как новое поле в request.POST, например:

def cadastro(request):
    url = 'https://gerador-nomes.herokuapp.com/nome/aleatorio'
    api = requests.get(url)
    nome_api = ' '.join(api.json())
    
    form = PessoaForm()
    if request.method == 'POST':
        updated_request = request.POST.copy()
        updated_request.update({'name': nome_api})
        form = PessoaForm(updated_request)
        if form.is_valid():
            form.save()
            return redirect('/')

    context = {'form': form, 'api': nome_api}
    return render(request, 'base/pessoa_form.html', context)
Вернуться на верх