From e5d1964da2bacb7ea64e08b58a53238595efca3d Mon Sep 17 00:00:00 2001 From: Mateusz Pawlak Date: Sun, 12 Jan 2025 21:24:22 +0100 Subject: [PATCH 1/2] solution --- taxi/urls.py | 19 ++++++++++++ taxi/views.py | 41 +++++++++++++++++++++++++ taxi_service/settings.py | 7 +++++ templates/taxi/car_delete.html | 10 ++++++ templates/taxi/car_detail.html | 2 ++ templates/taxi/car_form.html | 10 ++++++ templates/taxi/car_list.html | 2 ++ templates/taxi/manufacturer_delete.html | 10 ++++++ templates/taxi/manufacturer_form.html | 10 ++++++ templates/taxi/manufacturer_list.html | 9 ++++++ 10 files changed, 120 insertions(+) create mode 100644 templates/taxi/car_delete.html create mode 100644 templates/taxi/car_form.html create mode 100644 templates/taxi/manufacturer_delete.html create mode 100644 templates/taxi/manufacturer_form.html diff --git a/taxi/urls.py b/taxi/urls.py index c663d6e22..7b2c66dfb 100644 --- a/taxi/urls.py +++ b/taxi/urls.py @@ -7,6 +7,12 @@ DriverListView, DriverDetailView, ManufacturerListView, + CarCreateView, + CarUpdateView, + CarDeleteView, + ManufacturerCreateView, + ManufacturerUpdateView, + ManufacturerDeleteView, ) urlpatterns = [ @@ -22,6 +28,19 @@ path( "drivers//", DriverDetailView.as_view(), name="driver-detail" ), + path("cars/create/", CarCreateView.as_view(), name="car-create"), + path("cars//update/", CarUpdateView.as_view(), name="car-update"), + path("cars//delete/", CarDeleteView.as_view(), name="car-delete"), + path("manufacturers/create/", + ManufacturerCreateView.as_view(), + name="manufacturer-create"), + path("manufacturers//update/", + ManufacturerUpdateView.as_view(), + name="manufacturer-update"), + path("manufacturers//delete/", + ManufacturerDeleteView.as_view(), + name="manufacturer-delete"), + ] app_name = "taxi" diff --git a/taxi/views.py b/taxi/views.py index 4a99a2cd9..dbf7658d4 100644 --- a/taxi/views.py +++ b/taxi/views.py @@ -1,5 +1,6 @@ from django.contrib.auth.decorators import login_required from django.shortcuts import render +from django.urls import reverse_lazy from django.views import generic from django.contrib.auth.mixins import LoginRequiredMixin @@ -34,6 +35,26 @@ class ManufacturerListView(LoginRequiredMixin, generic.ListView): paginate_by = 5 +class ManufacturerCreateView(LoginRequiredMixin, generic.CreateView): + model = Manufacturer + fields = "__all__" + success_url = reverse_lazy("taxi/manufacturer_list") + template_name = "taxi/manufacturer_form.html" + + +class ManufacturerUpdateView(LoginRequiredMixin, generic.UpdateView): + model = Manufacturer + fields = "__all__" + success_url = reverse_lazy("taxi/manufacturer_list") + template_name = "taxi/manufacturer_form.html" + + +class ManufacturerDeleteView(LoginRequiredMixin, generic.DeleteView): + model = Manufacturer + success_url = reverse_lazy("taxi/manufacturer_list") + template_name = "taxi/manufacturer_delete.html" + + class CarListView(LoginRequiredMixin, generic.ListView): model = Car paginate_by = 5 @@ -44,6 +65,26 @@ class CarDetailView(LoginRequiredMixin, generic.DetailView): model = Car +class CarCreateView(LoginRequiredMixin, generic.CreateView): + model = Car + fields = "__all__" + success_url = reverse_lazy("taxi/car_list") + template_name = "taxi/car_form.html" + + +class CarUpdateView(LoginRequiredMixin, generic.UpdateView): + model = Manufacturer + fields = "__all__" + success_url = reverse_lazy("taxi/car_list") + template_name = "taxi/car_form.html" + + +class CarDeleteView(LoginRequiredMixin, generic.DeleteView): + model = Manufacturer + success_url = reverse_lazy("taxi/car_list") + template_name = "taxi/car_delete.html" + + class DriverListView(LoginRequiredMixin, generic.ListView): model = Driver paginate_by = 5 diff --git a/taxi_service/settings.py b/taxi_service/settings.py index d89c45643..0cb6afd1b 100644 --- a/taxi_service/settings.py +++ b/taxi_service/settings.py @@ -44,6 +44,9 @@ "django.contrib.staticfiles", "debug_toolbar", "taxi", + "crispy_bootstrap4", + "crispy_forms", + ] MIDDLEWARE = [ @@ -140,3 +143,7 @@ # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + +CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap4" + +CRISPY_TEMPLATE_PACK = "bootstrap4" diff --git a/templates/taxi/car_delete.html b/templates/taxi/car_delete.html new file mode 100644 index 000000000..ae278ad75 --- /dev/null +++ b/templates/taxi/car_delete.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} +{% block content %} +

Delete car:

+

Are you sure you want to delete the car: {{ car }}?

+

All data related to this car will be also deleted!

+
+ {% csrf_token %} + +
+{% endblock %} diff --git a/templates/taxi/car_detail.html b/templates/taxi/car_detail.html index ffdbe7186..0b2dfc0c5 100644 --- a/templates/taxi/car_detail.html +++ b/templates/taxi/car_detail.html @@ -9,4 +9,6 @@

Drivers

  • {{ driver.username }} ({{ driver.first_name }} {{ driver.last_name }})
  • {% endfor %} + Update + Delete {% endblock %} diff --git a/templates/taxi/car_form.html b/templates/taxi/car_form.html new file mode 100644 index 000000000..518e7cab0 --- /dev/null +++ b/templates/taxi/car_form.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} +{% load crispy_forms_filters %} +{% block content %} +

    {{ objects|yesno:"Update,Create" }} car:

    +
    + {% csrf_token %} + {{ form|crispy }} + +
    +{% endblock %} diff --git a/templates/taxi/car_list.html b/templates/taxi/car_list.html index e107b5797..dbe6941b3 100644 --- a/templates/taxi/car_list.html +++ b/templates/taxi/car_list.html @@ -14,4 +14,6 @@

    Car list

    {% else %}

    There are no cars in taxi

    {% endif %} + Add new car + {% endblock %} diff --git a/templates/taxi/manufacturer_delete.html b/templates/taxi/manufacturer_delete.html new file mode 100644 index 000000000..848f9c24f --- /dev/null +++ b/templates/taxi/manufacturer_delete.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} +{% block content %} +

    Delete manufacturer:

    +

    Are you sure you want to delete the manufacturer: {{ manufacturer }}?

    +

    All cars with this manufacturer will be also deleted!

    +
    + {% csrf_token %} + +
    +{% endblock %} diff --git a/templates/taxi/manufacturer_form.html b/templates/taxi/manufacturer_form.html new file mode 100644 index 000000000..f38544bb9 --- /dev/null +++ b/templates/taxi/manufacturer_form.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} +{% load crispy_forms_filters %} +{% block content %} +

    {{ objects|yesno:"Update,Create" }} manufacturer:

    +
    + {% csrf_token %} + {{ form|crispy }} + +
    +{% endblock %} diff --git a/templates/taxi/manufacturer_list.html b/templates/taxi/manufacturer_list.html index 2a31bcf60..671fcc74c 100644 --- a/templates/taxi/manufacturer_list.html +++ b/templates/taxi/manufacturer_list.html @@ -10,6 +10,8 @@

    Manufacturer List ID Name Country + Update + Delete {% for manufacturer in manufacturer_list %} @@ -23,6 +25,12 @@

    Manufacturer List {{ manufacturer.country }} + + + + + + - + {% endfor %} @@ -30,4 +38,5 @@

    Manufacturer List {% else %}

    There are no manufacturers in the service.

    {% endif %} + Add new manufacturer {% endblock %} From f63c454be93e1775c93563aeff8aa662aae1af66 Mon Sep 17 00:00:00 2001 From: Mateusz Pawlak Date: Sun, 12 Jan 2025 21:44:12 +0100 Subject: [PATCH 2/2] solution2 --- requirements.txt | 1 + taxi/views.py | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/requirements.txt b/requirements.txt index 9a8caa10f..6fa8b2017 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ flake8-variables-names==0.0.5 pep8-naming==0.13.2 django-debug-toolbar==3.2.4 django-crispy-forms==1.14.0 +crispy-bootstrap4 \ No newline at end of file diff --git a/taxi/views.py b/taxi/views.py index dbf7658d4..f1d166791 100644 --- a/taxi/views.py +++ b/taxi/views.py @@ -38,20 +38,20 @@ class ManufacturerListView(LoginRequiredMixin, generic.ListView): class ManufacturerCreateView(LoginRequiredMixin, generic.CreateView): model = Manufacturer fields = "__all__" - success_url = reverse_lazy("taxi/manufacturer_list") + success_url = reverse_lazy("taxi:manufacturer-list") template_name = "taxi/manufacturer_form.html" class ManufacturerUpdateView(LoginRequiredMixin, generic.UpdateView): model = Manufacturer fields = "__all__" - success_url = reverse_lazy("taxi/manufacturer_list") + success_url = reverse_lazy("taxi:manufacturer-list") template_name = "taxi/manufacturer_form.html" class ManufacturerDeleteView(LoginRequiredMixin, generic.DeleteView): model = Manufacturer - success_url = reverse_lazy("taxi/manufacturer_list") + success_url = reverse_lazy("taxi:manufacturer-list") template_name = "taxi/manufacturer_delete.html" @@ -68,20 +68,20 @@ class CarDetailView(LoginRequiredMixin, generic.DetailView): class CarCreateView(LoginRequiredMixin, generic.CreateView): model = Car fields = "__all__" - success_url = reverse_lazy("taxi/car_list") + success_url = reverse_lazy("taxi:car-list") template_name = "taxi/car_form.html" class CarUpdateView(LoginRequiredMixin, generic.UpdateView): - model = Manufacturer + model = Car fields = "__all__" - success_url = reverse_lazy("taxi/car_list") + success_url = reverse_lazy("taxi:car-list") template_name = "taxi/car_form.html" class CarDeleteView(LoginRequiredMixin, generic.DeleteView): model = Manufacturer - success_url = reverse_lazy("taxi/car_list") + success_url = reverse_lazy("taxi:car-list") template_name = "taxi/car_delete.html"