Как получить данные из базы данных и отобразить их в текстовом поле, чтобы пользователи могли их обновить

У меня есть веб-страница, которая должна позволить пользователям обновлять данные из базы данных, но данные не могут отображаться в текстовом поле, как мне сделать так, чтобы они могли отображаться в текстовом поле?

Это моя текущая веб-страница, где пользователям нужно вручную вводить все данные, которые они хотят обновить, в текстовое поле. enter image description here

Я хочу вот что, данные уже получены из базы данных для пользователей, и допустим они хотят обновить имя клиента, им просто нужно ввести имя клиента и нажать на кнопку отправки, чтобы обновить его, как мне сделать так, чтобы он мог получить данные? enter image description here

views.py

@login_required()
def updatedata(request, id):
    photo = Photo.objects.get(id=id)
    if request.method == 'POST':
        Photo.mcoNum = request.POST.get('mcoNum')
        Photo.reception = request.POST.get('reception')

        form = UpdateForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('logdata')
    else:
        form = UpdateForm

    return render(request, 'updatedata.html', {'form': form})

updatedata.html

<!doctype html>
{% extends "home.html" %}
{% block content %}
{% load static %}

<br><br>
    <h2 class="text-center">Edit Log Data</h2>
    <hr>
    <div class="col-md-6 offset-md-3">
        <form method="POST">
            {% csrf_token %}

            {{ form.as_p }}
            <input type="submit" value="Update" class="btn btn-secondary">
        </form>
    </div>
{% endblock %}

forms.py

class UpdateForm(forms.ModelForm):
    mcoNum = forms.CharField(label="", widget=forms.TextInput(
        attrs={"class": "form-control", "placeholder": "MCO Number"}))
    reception = forms.CharField(label="", max_length=100, widget=forms.TextInput(
        attrs={"class": "form-control", "placeholder": "reception"}))
    partno = forms.CharField(label="", max_length=100, widget=forms.TextInput(
        attrs={"class": "form-control", "placeholder": "Part Number"}))
    serialno = forms.CharField(label="", max_length=100,
                               widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "Serial Number"}))
    Customername = forms.CharField(label="", max_length=100,
                               widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "Customer Name"}))
    class Meta:
        model = Photo
        fields = ("mcoNum", "reception", "partno", "serialno", "Customername",)

попробуйте это. Вы должны передать экземпляр (фото) в форме.

@login_required()
def updatedata(request, id):
    photo = Photo.objects.get(id=id)
    if request.method == 'POST':
        Photo.mcoNum = request.POST.get('mcoNum')
        Photo.reception = request.POST.get('reception')

        form = UpdateForm(request.POST,instance=photo)
        if form.is_valid():
            form.save()
            return redirect('logdata')
    else:
        form = UpdateForm(instance=photo)

    return render(request, 'updatedata.html', {'form': form})

вам нужно передать данные модели из представления в шаблон вы можете иметь функцию в вашем представлении, которая ссылается на одну страницу, вот пример

# here is first function that send information to your fields
# i suggest you to use id in url and here to recognize which record you are updating
def editbox(request,id)
    # here we get informations from model database
    data = yourmodel.objects.get(id=id) #here yourmodel is your actual model name that you have to import above
    return render(request,'updatedata.html',{"data":data}) # and here we pass to html


# secondly you have to update and edit your data
def FunctionName(request,id):
    updateme = yourmodel.objects.get(id=id) # here we have to use again to recognize which data we're updating
    form = yourupdateform(request.POST,instance=updateme) # it send data 
    if form.is_valid: 
        form.save()
        return redirect('logdata') # redirect if you want 

и теперь вам нужно сделать вашу форму:

from django import forms
from .models import yourmodel

class formname(forms.ModelForm):
    model=yourmodel
    fields="__all__" # this will update all the fields of model class

вам нужно отредактировать урлы, чтобы передать id из url для работы этих функций

   # you need to have two function, one of them is for editing and ecyrything is there and other is just for update
   # replace your function name there
   path('edit/<int:id>',views.youreditfunction')
   path('update/<int:id>',views.yourupdatefunction')

теперь время сделать html:

   <br><br>
    <h2 class="text-center">Edit Log Data</h2>
    <hr>
    <div class="col-md-6 offset-md-3">
        <form action="/update/{{ data.id }}" method="post">
            <!-- here you can style your forms and etc i dont focus on here -->
            {% crf_token %}

            # here is an example of what you can do you can write as much as you want
            <input type="text" class="form-control" value="{{ data.username }}">

            <input type="submit" value="Update">
        </form>
    </div>

я думаю, что этот способ работает, но не на 100%

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