Добавил предварительный просмотр для статей и продуктов

This commit is contained in:
NikDizell 2026-06-19 22:48:25 +03:00
parent 5a9c0bbcc6
commit e9bd2b912d
4 changed files with 23 additions and 1 deletions

View File

@ -152,6 +152,8 @@ class ArticleDraftPreviewView(MenuContextMixin, BreadcrumbMixin, DetailView):
model = Article
template_name = 'blog/article_detail.html' # используем тот же шаблон
context_object_name = 'article'
slug_field = 'slug'
slug_url_kwarg = 'slug'
def get_queryset(self):
# Для предпросмотра показываем даже неопубликованные статьи

View File

@ -4,6 +4,7 @@ from django.shortcuts import render
from django_ckeditor_5.widgets import CKEditor5Widget
from .models import ProductCategory, Configuration, Product, Order
from programmer.utils.email_notifications import send_multiple_order_notifications, send_multiple_order_notifications_async
from django.urls import reverse
@admin.register(ProductCategory)
@ -57,6 +58,12 @@ class ProductAdmin(admin.ModelAdmin):
return ", ".join(c.name for c in obj.configurations.all())
configurations_list.short_description = "Конфигурации"
def view_on_site(self, obj):
if obj.is_published:
return obj.get_absolute_url()
# Для неопубликованных — ссылка на предпросмотр
return reverse('products:product_draft_preview', args=[obj.slug])
def make_published(self, request, queryset):
queryset.update(is_published=True)
make_published.short_description = "Опубликовать выбранные продукты"

View File

@ -7,4 +7,5 @@ urlpatterns = [
path('', views.ProductListView.as_view(), name='product_list'),
path('<slug:slug>/', views.ProductDetailView.as_view(), name='product_detail'),
path('order/<slug:slug>/', views.order_create, name='order_create'),
path('draft/<slug:slug>/', views.ProductDraftPreviewView.as_view(), name='product_draft_preview'),
]

View File

@ -1,4 +1,4 @@
from django.views.generic import ListView, DetailView
from django.views.generic import ListView, DetailView, DetailView
from programmer.mixins import MenuContextMixin, BreadcrumbMixin
from .models import Product, ProductCategory, Configuration
from django.shortcuts import get_object_or_404
@ -8,6 +8,8 @@ from .forms import OrderForm
from django.contrib import messages
from django.shortcuts import redirect
from programmer.utils.email_notifications import send_order_notification, send_order_notification_async
from django.utils.decorators import method_decorator
from django.contrib.admin.views.decorators import staff_member_required
class ProductListView(MenuContextMixin, BreadcrumbMixin, ListView):
@ -132,6 +134,16 @@ class ProductDetailView(MenuContextMixin, BreadcrumbMixin, DetailView):
return context
@method_decorator(staff_member_required, name='dispatch')
class ProductDraftPreviewView(DetailView):
model = Product
template_name = 'products/product_detail.html'
context_object_name = 'product'
def get_queryset(self):
# Показываем все продукты (включая неопубликованные) только для персонала
return Product.objects.all()
def order_create(request, slug):
product = get_object_or_404(Product, slug=slug, is_published=True)