diff options
Diffstat (limited to 'core/views.py')
| -rw-r--r-- | core/views.py | 104 |
1 files changed, 101 insertions, 3 deletions
diff --git a/core/views.py b/core/views.py index f090d81..0e62eaf 100644 --- a/core/views.py +++ b/core/views.py @@ -7,9 +7,12 @@ from django.contrib.auth.views import LoginView from django.contrib import messages from django.db.models import Q from django.contrib.auth.mixins import UserPassesTestMixin +from django.http import HttpResponseRedirect +from extra_views import CreateWithInlinesView, UpdateWithInlinesView +from django import forms -from .models import Product, Supplier -from .forms import ProductForm +from .models import Product, Supplier, Order, OrderItem +from .forms import ProductForm, OrderForm, OrderItemFormSet class UserLoginView(LoginView): template_name = "core/login.html" @@ -54,7 +57,7 @@ class AdminRequiredMixin(UserPassesTestMixin): return ( self.request.user.is_authenticated and self.request.user.role - and self.request.user.role == "Администратор" + and self.request.user.role.name == "Администратор" ) class ProductCreateUpdateMixin: @@ -72,3 +75,98 @@ class ProductCreateView(AdminRequiredMixin, ProductCreateUpdateMixin, CreateView def form_valid(self, form): messages.success(self.request, "Товар успешно добавлен") return super().form_valid(form) + +class ProductUpdateView(AdminRequiredMixin, ProductCreateUpdateMixin, UpdateView): + model = Product + form_class = ProductForm + template_name = "core/product_form.html" + success_url = reverse_lazy("product_list") + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["is_edit"] = True + return context + + +class AdminManagerRequiredMixin(UserPassesTestMixin): + def test_func(self): + return ( + self.request.user.is_authenticated + and self.request.user.role + and (self.request.user.role.name == "Администратор" or self.request.user.role.name == "Менеджер") + ) + +class OrderListView(AdminManagerRequiredMixin, ListView): + model = Order + template_name = "core/order_list.html" + context_object_name = "orders" + + +class OrderCreateView(CreateWithInlinesView): + model = Order + form_class = OrderForm + inlines = [OrderItemFormSet] + success_url = reverse_lazy("order_list") + +class OrderUpdateView(UpdateWithInlinesView): + model = Order + form_class = OrderForm + inlines = [OrderItemFormSet] + success_url = reverse_lazy("order_list") + +# formset variant +# class OrderCreateView(CreateView): +# model = Order +# form_class = OrderForm +# template_name = "core/order_form.html" +# success_url = reverse_lazy("order_list") + +# def get_context_data(self, **kwargs): +# context = super().get_context_data(**kwargs) +# if self.request.POST: +# # re-use the bound formset if post() already stashed an invalid one +# context["formset"] = getattr(self, "formset", OrderItemFormSet(self.request.POST)) +# else: +# context["formset"] = OrderItemFormSet() +# return context + +# def post(self, request, *args, **kwargs): +# self.object = None +# form = self.get_form() +# formset = OrderItemFormSet(request.POST) +# if form.is_valid() and formset.is_valid(): +# self.object = form.save() +# formset.instance = self.object +# formset.save() +# return HttpResponseRedirect(self.get_success_url()) +# # stash the invalid formset so get_context_data renders it with errors +# self.formset = formset +# return self.form_invalid(form) + + +# class OrderUpdateView(UpdateView): +# model = Order +# form_class = OrderForm +# template_name = "core/order_form.html" +# success_url = reverse_lazy("order_list") + +# def get_context_data(self, **kwargs): +# context = super().get_context_data(**kwargs) +# if self.request.POST: +# context["formset"] = getattr( +# self, "formset", OrderItemFormSet(self.request.POST, instance=self.object) +# ) +# else: +# context["formset"] = OrderItemFormSet(instance=self.object) +# return context + +# def post(self, request, *args, **kwargs): +# self.object = self.get_object() +# form = self.get_form() +# formset = OrderItemFormSet(request.POST, instance=self.object) +# if form.is_valid() and formset.is_valid(): +# form.save() +# formset.save() +# return HttpResponseRedirect(self.get_success_url()) +# self.formset = formset +# return self.form_invalid(form) |
