Home > Enterprise >  2023 Everybody! We made it. I want to update my form, but my details are not pulling through to the
2023 Everybody! We made it. I want to update my form, but my details are not pulling through to the

Time:01-04

I want to Update/Edit my details on my form. I want to pull the existing details from the database and have them populate on the form, without having the user start from the beginning.

Views.py

def Client_Update(request, Client_id):
    ClientUpdate = TestModel.objects.get(pk=Client_id)
    ClientUpdates = TestForm(request.POST or None, instance=ClientUpdate)
    if request.method == 'POST':
       if ClientUpdates.is_valid():
        ClientUpdates.save()
        return redirect('/Client_Details')
    return render(request, 'GymApp/ClientUpdate.html',
    {'ClientUpdate':ClientUpdate,
    'ClientUpdates':ClientUpdates})

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.Home, name='Home'),
    path('ClientList/', views.Client_list, name='Client_list'),
    path('ClientDetails/<int:Client_id>', views.Client_Details, name='Client_Details'),
    path('ClientUpdate/<int:Client_id>', views.Client_Update, name='Client_Update'),
    path('ClientDelete/<int:Client_id>', views.Client_Delete, name='Client_Delete'),
    path('DownloadingCSV/', views.DownloadingCSV, name='DownloadingCSV'),
    path('Search/', views.Search, name='Search'),

]

HTML Page

{% extends 'GymApp/Layout.html' %}
{% block content %}
    <h1>Updating status</h1>
    <form action="" method="POST">
        {% csrf_token %}
        <div >
            <input type="text" 
             name="Name" placeholder="Client's Name"><br>
            <input type="text" 
              name="Surname"placeholder="Client's Surname"><br>
            <select name="Gender" >
                <option selected disabled>
                    Open this select menu
                </option>
                <option value="Male">Male</option><br>
                <option value="Female">Female</option>
            </select>
        </div>
        <div > 
            <input type="text"   name="Weight" id="Weight" placeholder="Client's Weight"><br><br>
            <input type="text"   name="Height" id="Height" placeholder="Client's Height"><br><br>
            <button type="button" onclick="calculation()">Calculation update</button>
            <br>
        </div>
        <br>
        <div >
            
            <input type="text"   name="Outcome" id="Outcome" placeholder="BMI Outcome"><br>
            <select name="Activity_log" ><br>
                <option selected disabled>Open this select menu</option>
                <option value="Not Active">Not Active</option><br>
                <option value="Active">Active</option>
            </select>
            <br>
            <button type="submit">Finalising update!</button>
    </div>
    </form>
    <script>
        function calculation(){
            W = document.getElementById('Weight').value;
            H = document.getElementById('Height').value;

            O = W * H;

            document.getElementById('Outcome').value = O;
        }
    </script>
{% endblock %}

And the outcome when i press the Update button is the following: As you can see, the form is empty

As you can the form is empty

How to i pull the existing details on my form? Please help.

from django.db import models

# Create your models here.
class TestModel(models.Model):
    Name = models.CharField(max_length=30, blank=True)
    Surname = models.CharField(max_length=30, blank=True)
    Weight = models.CharField(max_length=30, blank=True)
    Height = models.CharField(max_length=30,blank=True)
    Gender = models.CharField(max_length=6, blank=True, null=True)
    Outcome = models.CharField(max_length=30,blank=True)
    Activity = models.CharField(max_length=30, blank=True)

    def __str__(self):
        return self.Name

And this is my updated HTML

<form action="" method="POST">
        {% csrf_token %}
        <div >
            <input type="text"  name="Name" value={{Name}}><br>
            <input type="text"  name="Surname" value={{Surname}}><br>
            <select name="Gender" >
                <option selected disabled>
                    Open this select menu
                </option>
                <option value="Male" value={{Gender}}>Male</option><br>
                <option value="Female" value={{Gender}}>Female</option>
            </select>
        </div>
        <div > 
            <input type="text"  id="Weight" value={{Weight}} ><br><br>
            <input type="text"  id="Height" value={{Height}} ><br><br>
            <button type="button" onclick="calculation()">Calculation update</button>
            <br>
        </div>
        <br>
        <div >
            
            <input type="text"   name="Outcome" id="Outcome" placeholder="BMI Outcome"><br>
            <select name="Activity_log" ><br>
                <option selected disabled>Open this select menu</option>
                <option value="Not Active">Not Active</option><br>
                <option value="Active">Active</option>
            </select>
            <br>
            <button type="submit">Finalising update!</button>
    </div>
    </form>

All my views.py

from django.shortcuts import render, redirect
from . models import TestModel
from . forms import TestForm
from django.http import HttpResponse
import csv

# Create your views here.
def Search(request):
    if request.method == "POST":
        Searching = request.POST['Searching']
        Results_query = TestModel.objects.filter(Name__contains=Searching)
        {'Searching':Searching,
        'Results_query':Results_query}
    return render(request, 'GymApp/Searching.html',
    {'Searching':Searching,
        'Results_query':Results_query})

def DownloadingCSV(request):
        response = HttpResponse(content_type='text/csv')
        response['content-disposition'] = 'attachment; filename=Client_list.csv'

        writer = csv.writer(response)
        Downloading_all = TestModel.objects.all()
        writer.writerow(['Name','Surname',
                        'Weight','Height',
                        'Outcome','Gender',
                        'Activity'])
        for download in Downloading_all:
            writer.writerow([download.Name,
                        download.Surname,
                        download.Weight,
                        download.Height,
                        download.Outcome,
                        download.Gender,
                        download.Activity])
        return response 

def Client_Delete(request, Client_id):
    ClientUpdate = TestModel.objects.get(pk=Client_id)
    ClientUpdate.delete()
    return redirect('Home')

def Client_Update(request, Client_id):
    ClientUpdate = TestModel.objects.get(pk=Client_id)
    ClientUpdates = TestForm(request.POST or None, instance=ClientUpdate)
    if request.method == 'POST':
       if ClientUpdates.is_valid():
        ClientUpdates.save()
        return redirect('/Client_Details')
    return render(request, 'GymApp/ClientUpdate.html',
    {'ClientUpdate':ClientUpdate,
    'ClientUpdates':ClientUpdates})

def Client_list(request):
    Clients = TestModel.objects.all()
    return render(request, 'GymApp/ClientList.html',
    {'Clients':Clients})

def Client_Details(request, Client_id):
    ClientDetails = TestModel.objects.get(pk=Client_id)
    return render(request, 'GymApp/ClientDetails.html',
    {'ClientDetails':ClientDetails})

def Home(request):
    Forms = TestForm
    if request.method == 'POST':
        Forms = TestForm(request.POST or None)
        if Forms.is_valid():
            Forms.save()
            return redirect('Client_list')
    return render(request, 'GymApp/Home.html',{})

CodePudding user response:

### You have not given value
 <input type="text" 
             name="Name" value={{ClientUpdates.Name}} placeholder="Client's Name"><br>

###{{Name}} --> your model field name

  • Related