Как заполнить форму 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)