Update Record Trong Django

246 lượt xem Django
Rate this post

Cập Nhật Hồ Sơ

Để cập nhật một bản ghi, chúng ta cần ID của bản ghi và chúng ta cần một mẫu có giao diện cho phép chúng ta thay đổi các giá trị.

Trước tiên, chúng ta cần thực hiện một số thay đổi trong mẫu index.html.

Sửa Đổi Mẫu

Bắt đầu bằng cách thêm liên kết cho từng thành viên trong bảng:

members/templates/index.html:

<h1>Members</h1>

<table border="1">
{% for x in mymembers %}
<tr>
<td><a href="update/{{ x.id }}">{{ x.id }}</a></td>
<td>{{ x.firstname }}</td>
<td>{{ x.lastname }}</td>
<td><a href="delete/{{ x.id }}">delete</a>
</tr>
{% endfor %}
</table>

<p>
<a href="add/">Add member</a>
</p>

Liên kết chuyển đến một chế độ xem được gọi là cập nhật với ID của thành viên hiện tại.

Kết quả sẽ như thế này:

Sửa Đổi Mẫu
Sửa Đổi Mẫu

Lượt Xem

Tiếp theo, thêm chế độ xem update trong tệp members/ views.py:

members/views.py:

from django.http import HttpResponse, HttpResponseRedirect
from django.template import loader
from django.urls import reverse
from .models import Members

def index(request):
  mymembers = Members.objects.all().values()
  template = loader.get_template('index.html')
  context = {
    'mymembers': mymembers
  }
  return HttpResponse(template.render(context, request))
  
def add(request):
  template = loader.get_template('add.html')
  return HttpResponse(template.render({}, request))
  
 def addrecord(request):
  first = request.POST['first']
  last = request.POST['last']
  member = Members(firstname=first, lastname=last)
  member.save()
  
return HttpResponseRedirect(reverse('index'))

def delete(request, id):
  member = Members.objects.get(id=id)
  member.delete()
  return HttpResponseRedirect(reverse('index'))
  
def update(request, id):
  mymember = Members.objects.get(id=id)
  template = loader.get_template('update.html')
  context = {
    'mymember': mymember,
  }
  return HttpResponse(template.render(context, request))

Chế độ xem update thực hiện như sau:

  • Lấy id làm đối số.
  • Sử dụng id để định vị bản ghi chính xác trong bảng Thành viên.
  • tải một mẫu có tên update.html.
  • Tạo một đối tượng chứa thành viên.
  • Gửi đối tượng đến mẫu.
  • Xuất ra HTML được hiển thị bởi mẫu.

Bản Mẫu Mới

Thêm một mẫu mới trong thư mục templates, có tên là update.html:

members/templates/update.html:

<h1>Update member</h1>

<form action="updaterecord/{{ mymember.id }}" method="post">
{% csrf_token %}
First Name:<br>
<input name="first" value="{{ mymember.firstname }}">
<br><br>
Last Name:<br>
<input name="last" value="{{ mymember.lastname }}">
<br><br>
<input type="submit" value="Submit">
</form>

Mẫu chứa một biểu mẫu HTML với các giá trị từ thành viên đã chọn.

Lưu ý: Django yêu cầu dòng này ở dạng:
{% csrf_token%}
để xử lý Giả mạo yêu cầu chéo trang web trong các biểu mẫu có phương thức là POST.

URLs

Thêm một hàm path () trong tệp members/ urls.py để trỏ url 127.0.0.1:8000/members/update/ đến đúng vị trí, với ID làm tham số:

members/urls.py:

from django.urls import path

from . import views

urlpatterns = [
  path('', views.index, name='index'),
  path('add/', views.add, name='add'),
  path('add/addrecord/', views.addrecord, name='addrecord'),
  path('delete/<int:id>', views.delete, name='delete'),
  path('update/<int:id>', views.update, name='update'),
]

Trong trình duyệt, nhấp vào ID của thành viên bạn muốn thay đổi và kết quả sẽ như sau:

URLs
URLs

Điều Gì Xảy Ra Khi Gửi?

Bạn có nhận thấy thuộc tính action trong biểu mẫu HTML không? Thuộc tính action chỉ định nơi gửi dữ liệu biểu mẫu, trong trường hợp này, dữ liệu biểu mẫu sẽ được gửi đến:

updaterecord / {{mymember.id}}, vì vậy chúng ta phải thêm một hàm path () trong tệp members/ urls.py trỏ đến chế độ xem bên phải:

members/urls.py:

from django.urls import path

from . import views

urlpatterns = [
  path('', views.index, name='index'),
  path('add/', views.add, name='add'),
  path('add/addrecord/', views.addrecord, name='addrecord'),
  path('delete/<int:id>', views.delete, name='delete'),
  path('update/<int:id>', views.update, name='update'),
  path('update/updaterecord/<int:id>', views.updaterecord, name='updaterecord'),
]

Mã Cập Nhật Hồ Sơ

Cho đến nay, chúng tôi đã tạo giao diện người dùng và chúng tôi trỏ URL đến chế độ xem được gọi là updaterecord, nhưng chúng tôi vẫn chưa tạo chế độ xem.

Đảm bảo rằng bạn thêm chế độ xem updaterecord trong tệp tin members/ views.py:

members/views.py:

from django.http import HttpResponse, HttpResponseRedirect
from django.template import loader
from django.urls import reverse
from .models import Members

def index(request):
  mymembers = Members.objects.all().values()
  template = loader.get_template('index.html')
  context = {
    'mymembers': mymembers,
  }
  return HttpResponse(template.render(context, request))
  
def add(request):
  template = loader.get_template('add.html')
  return HttpResponse(template.render({}, request))
  
def addrecord(request):
  x = request.POST['first']
  y = request.POST['last']
  member = Members(firstname=x, lastname=y)
  member.save()
  return HttpResponseRedirect(reverse('index'))
  
def delete(request, id):
  member = Members.objects.get(id=id)
  member.delete()
  return HttpResponseRedirect(reverse('index'))
  
def update(request, id):
  mymember = Members.objects.get(id=id)
  template = loader.get_template('update.html')
  context = {
    'mymember': mymember,
  }
  return HttpResponse(template.render(context, request))
  
def updaterecord(request, id):
  first = request.POST['first']
  last = request.POST['last']
  member = Members.objects.get(id=id)
  member.firstname = first
  member.lastname = last
  member.save()
  return HttpResponseRedirect(reverse('index'))

Hàm updaterecord sẽ cập nhật bản ghi trong bảng thành viên với ID đã chọn.

Hãy thử cập nhật một bản ghi và xem nó hoạt động như thế nào:

Mã Cập Nhật Hồ Sơ
Mã Cập Nhật Hồ Sơ

Nếu bạn nhấn nút gửi, bảng thành viên sẽ được cập nhật:

Mã Cập Nhật Hồ Sơ
Mã Cập Nhật Hồ Sơ

0 / 5 - (0 Đánh Giá)

Leave a Reply

Your email address will not be published. Required fields are marked *

PHP Code Snippets Powered By : XYZScripts.com
.
.
.
.