Начальные значения для некоторых полей из базы данных
Можно ли поместить данные из базы данных в начальную форму?
def add_customer_from_list(request, pk):
application = Contact.objects.get(pk=pk)
params = {'name': application.name,
'email': application.email,
'phone_number': application.phone_number,
'dog_name': application.dog_name,
'service_type': application.service_type}
form = CustomerForm(request.POST or None, initial=params)
if form.is_valid():
"""form.name = form.cleaned_data['name']
form.email = form.cleaned_data['email']
form.phone_number = form.cleaned_data['phone_number']
form.address = form.cleaned_data['address']
form.dog_name = form.cleaned_data['dog_name']
form.dog_age = form.cleaned_data['dog_age']
form.service_type = form.cleaned_data['service_type']
form.training_place = form.cleaned_data['training_place']
form.contact_date = form.cleaned_data['contact_date']
form.source = form.cleaned_data['source']
form.status = form.cleaned_data['status']
form.notes = form.cleaned_data['notes']"""
form.save()
return redirect('xxx')
return render(request, 'xxx', {'form' : form})
Я хочу, чтобы некоторые поля автоматически заполнялись данными из базы данных, я уже пробовал различные способы, но безрезультатно. То, что я написал выше, почему-то не заполняет поля для меня
Инициальные значения, которые вы передаете с помощью initial=...
, отображаются только для "несвязанных форм", т.е. форм, не имеющих данных запроса. Поскольку вы передаете request.POST
или даже None
, это не работает. Обычная идиома такова:
if request.method == "POST":
# May skip passing initial here unless you use `form.has_changed()`
form = CustomerForm(request.POST, initial=initial)
if form.is_valid():
form.save()
return redirect(...)
else:
form = CustomerForm(initial=initial)
# pass either an invalid or a new form to template ...
Если вам нужно передать начальные значения из экземпляра модели, обычно имеет смысл использовать ModelForm
и использовать instance=...
вместо initial=...
.
Я написал что-то вроде этого, он заполняет поля для меня, к сожалению, после нажатия кнопки отправки, выскакивает ошибка DoesNotExist и ошибка в строке с определением application
def add_customer_from_list(request):
if request.method == "POST":
application = Contact.objects.get(pk=request.POST.get('id'))
form = CustomerForm(instance=application)
if form.is_valid():
form.save()
return redirect(xxx)
return render(request, 'xxx', {'form': form})
def create_customer(request, pk=None):
form = CustomerForm(request.POST or None)
if request.method == 'GET':
if pk is not None:
instance = Contact.objects.get(pk=pk)
form = CustomerForm(request.POST or None, instance=instance)
elif request.method == 'POST':
if form.is_valid():
form.save()
messages.success(request, 'Klient został pomyślnie utworzony')
return HttpResponseRedirect(reverse('xxx'))
return render(request, 'xxx', {'form': form})
Я изменил всю концепцию, отправил ссылку на методы get to view, где я использовал метод от друга, который разместил здесь. Необязательный параметр - это потому, что функция служит как обычное дополнение и без параметра. С уважением и благодарностью за помощь