From 386e9defbea931ebc5139a5db5c74e6f44bbbe02 Mon Sep 17 00:00:00 2001 From: spl3g Date: Mon, 1 Jun 2026 17:38:35 +0300 Subject: add product creation page and search filters --- config/settings.py | 2 ++ config/urls.py | 9 +++-- core/templates/core/login.html | 2 ++ core/templates/core/product_form.html | 15 ++++++++ core/templates/core/product_list.html | 42 ++++++++++++++++++++++ core/views.py | 65 +++++++++++++++++++++++++++++++++-- 6 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 core/templates/core/product_form.html diff --git a/config/settings.py b/config/settings.py index 8ba7d50..d31c34e 100644 --- a/config/settings.py +++ b/config/settings.py @@ -125,3 +125,5 @@ STATICFILES_DIRS = [BASE_DIR / "static"] MEDIA_URL = "/media/" MEDIA_ROOT = BASE_DIR / "media" +LOGIN_REDIRECT_URL = "product_list" +LOGOUT_REDIRECT_URL = "login" diff --git a/config/urls.py b/config/urls.py index ff27744..1808f0f 100644 --- a/config/urls.py +++ b/config/urls.py @@ -20,13 +20,18 @@ from django.contrib.auth.views import LogoutView from django.conf import settings from django.conf.urls.static import static -from core.views import UserLoginView, ProductListView +from core.views import ( + UserLoginView, + ProductListView, + ProductCreateView, +) urlpatterns = [ path('admin/', admin.site.urls), path("", UserLoginView.as_view(), name="login"), path("logout/", LogoutView.as_view(), name="logout"), - path("products/", ProductListView.as_view(), name="products"), + path("products/", ProductListView.as_view(), name="product_list"), + path("products/add/", ProductCreateView.as_view(), name="product_create"), ] if settings.DEBUG: diff --git a/core/templates/core/login.html b/core/templates/core/login.html index c17f521..098a9fd 100644 --- a/core/templates/core/login.html +++ b/core/templates/core/login.html @@ -27,5 +27,7 @@ + + Войти как гость {% endblock %} diff --git a/core/templates/core/product_form.html b/core/templates/core/product_form.html new file mode 100644 index 0000000..81a7075 --- /dev/null +++ b/core/templates/core/product_form.html @@ -0,0 +1,15 @@ +{% extends 'core/base.html' %} + +{% block title %}{% if is_edit %}Редактирование{% else %}Добавление{% endif %} товара - ОООБувь{% endblock %} + +{% block h1 %}{% if is_edit %}Редактирование{% else %}Добавление{% endif %} товара{% endblock %} + +{% block content %} +
+
+ {% csrf_token %} + {{ form }} + +
+
+{% endblock %} diff --git a/core/templates/core/product_list.html b/core/templates/core/product_list.html index ac4b8c7..ad7a5bf 100644 --- a/core/templates/core/product_list.html +++ b/core/templates/core/product_list.html @@ -5,6 +5,48 @@ {% block h1 %}Каталог товаров{% endblock %} {% block content %} +{% if user.role.name == "Администратор" or user.role.name == "Менеджер" %} +
+
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+ + {% comment %} +
+ Заказы +
+ {% endcomment %} + + {% if user.role.name == 'Администратор' %} +
+ Добавить товар +
+ {% endif %} +
+
+{% endif %}
{% for product in products %}
dict[str, Any]: + context = super().get_context_data(**kwargs) + context["suppliers"] = Supplier.objects.all() + context["current_supplier"] = self.request.GET.get("supplier", "") + context["current_search"] = self.request.GET.get("search", "") + context["current_sort"] = self.request.GET.get("sort", "") + + return context + + +class AdminRequiredMixin(UserPassesTestMixin): + def test_func(self): + return ( + self.request.user.is_authenticated + and self.request.user.role + and self.request.user.role == "Администратор" + ) + +class ProductCreateUpdateMixin: + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["all_suppliers"] = Supplier.objects.all() + return context + +class ProductCreateView(AdminRequiredMixin, ProductCreateUpdateMixin, CreateView): + model = Product + form_class = ProductForm + template_name = "core/product_form.html" + success_url = reverse_lazy("product_list") + + def form_valid(self, form): + messages.success(self.request, "Товар успешно добавлен") + return super().form_valid(form) -- cgit v1.2.3