Django – #22 – CRUD cz. 4

Wprowadzenie.

W czwartej części wpisów o CRUD zajmiemy się edycją / aktualizacją (U – UPDATE) rekordów w bazie danych i sprawdzimy, czy nasze zmiany zostały zapisane.

Zakres artykułu.

  • Operacja „U – Update”
  • Testy
 

Operacja "U - Update"

Na początku przejdźmy do pliku urls.py, gdzie dodamy kolejną funkcję path. Funkcja ta będzie bardzo podobna do funkcji z poprzedniego wpisu o wyświetlaniu szczegółów i będzie wyglądała następująco: path(’/update/', views.UpdateBlog_page.as_view(), name=”update_blog_page”),.

from django.contrib import admin
from django.urls import path
from crud import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),

    path('create/', views.CreateBlog_page.as_view(), name="create_blog_page"),
    path('<int:pk>/', views.DetailBlog_page.as_view(), name="detail_blog_page"),
    path('<int:pk>/update/', views.UpdateBlog_page.as_view(), name="update_blog_page"),
]

Następnie przejdźmy do zmiany pliku views.py, gdzie dodamy klasę UpdateBlog_page(generic.UpdateView), która dziedziczy po klasie generic.UpdateView. W tej klasie należy określić takie zmienne jak model, template_name, fields oraz success_url. Do zmiennej model standardowo przypisujemy nazwę klasy naszego modelu, który będziemy chcieli edytować. Do template_name przypisujemy string, który stanowi ścieżkę do naszego szablonu, który niebawem stworzymy. Do zmiennej field przypisujemy listę z nazwami naszych pól z naszego modelu, które będziemy chcieli edytować, natomiast do zmiennej success_url przypisujemy funkcję reverse_lazy(). Funkcja reverse_lazy() przyjmuje argument name podany w funkcji path w pliku urls.py i dzięki temu wie, do jakiej strony musi być wykonane przekierowanie w przypadku jeżeli edycja danych przebiegła pomyślnie.

class UpdateBlog_page(generic.UpdateView):
    model = Blog
    template_name = 'crud/update_page.html'
    fields = ['title', 'body']
    success_url = reverse_lazy('home')

Następnie stwórzmy nasz szablon do edycji danych. Szablon zawiera formularz w którym będą znajdować się nasze pola do edycji. Pola możemy wygenerować automatycznie poprzez wyświetlenie zmiennej {{ form.as_p }}.

{% extends 'crud/base.html' %}

{% block content %}
  <div class="container">
    <h2>Edytuj</h2>
    <form method="POST">
      {% csrf_token %}
      {{ form.as_p }}
      <button type="submit" class="btn btn-primary">Zapisz zmiany</button>
    </form>
  </div>
{% endblock %}

Na koniec podobnie jak w poprzednim wpisie w celu szybkiego przetestowania nowo stworzonej funkcjonalności zmodyfikujmy szablon bazowy, gdzie do przycisku Edytuj przypiszmy na stałe adres url z id 1.  

      <nav class="my-2 my-md-0 mr-md-3">
        <a class="btn btn-outline-primary" href="{% url 'home' %}">HOME</a>
        <a class="btn btn-outline-primary" href="{% url 'create_blog_page' %}">Stwórz</a>
        <a class="btn btn-outline-primary" href="{% url 'detail_blog_page' 1 %}">Zobacz</a>
        <a class="btn btn-outline-primary" href="{% url 'update_blog_page' 1 %}">Edytuj</a>
        <a class="btn btn-outline-danger" href="">Usuń</a>
      </nav>

Testy

Przejdźmy teraz do testowania naszej aplikacji. W pierwszym kroku przejdźmy na naszą stronę startową wpisując w przeglądarce 127.0.0.1:8000

Następnie naciśnijmy na przycisk Edytuj. W przeglądarce powinniśmy zobaczyć następujący adres. 127.0.0.1:8000/1/update/, a na stronie powinien ukazać nam się nasz wpis, który stworzyliśmy w drugiej części wpisów o CRUD z polami umożliwiającymi edycję pola Title i Body.

Po wprowadzeniu zmian i ich zapisaniu, przejdźmy do podejrzenia wpisu przy pomocy przycisku Zobacz. Na stronie powinniśmy teraz zobaczyć nasze zmodyfikowane dane oraz na końcu wpisu powinna być widoczna zmieniona data naszej edycji wpisu.

Autor artykułu
Dominik Bednarski

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *