Начальные значения для некоторых полей из базы данных

Можно ли поместить данные из базы данных в начальную форму?

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, где я использовал метод от друга, который разместил здесь. Необязательный параметр - это потому, что функция служит как обычное дополнение и без параметра. С уважением и благодарностью за помощь

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