Как получить данные из базы данных и отобразить их в текстовом поле, чтобы пользователи могли их обновить
У меня есть веб-страница, которая должна позволить пользователям обновлять данные из базы данных, но данные не могут отображаться в текстовом поле, как мне сделать так, чтобы они могли отображаться в текстовом поле?
Это моя текущая веб-страница, где пользователям нужно вручную вводить все данные, которые они хотят обновить, в текстовое поле.
Я хочу вот что, данные уже получены из базы данных для пользователей, и допустим они хотят обновить имя клиента, им просто нужно ввести имя клиента и нажать на кнопку отправки, чтобы обновить его, как мне сделать так, чтобы он мог получить данные?
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%