DetailView и поиск страницы по составному slug

20 views
Skip to first unread message

Za Ars

unread,
Mar 1, 2017, 6:02:21 AM3/1/17
to Django russian
В общем, есть DetailView и 2 модели: Категория и Товар. Работаю на Mezzanine

Не могу найти DetailView для Товара по урлу типа категория/товар

У товара может быть несколько категорий, поэтому при создании товара полный Slug сгенерить не получится

# urls.py

app_name
= 'market'
urlpatterns = [

    url
(r'^categories$', views.CategoryListView.as_view(), name='category-list'),
    url
(r'^categories/page-(?P<page>\d+)$', views.CategoryListView.as_view(), name='category-list'),

    url
(r'^categories/(?P<slug>[\w\d\-\_\/]+)$', views.CategoryDetailView.as_view(), name='category-detail'),

    url
(r'^categories/(?P<cat_slug>[\w\d\-\_\/]+)/(?P<slug>[\w\d\-\_\/]+)$', views.ProductDetailView.as_view(),
       
name='product-detail'),

]


# views.py


class CategoryListView(generic.ListView):
    model
= models.Category

    template_name
= 'market/category/list.html'

    def get_queryset(self):
       
if settings.MARKET_EXLUDE_CHILDREN_FROM_CATEGORY_CHILDREN:
           
return self.model.objects.filter(parent=None, published=True)
       
return super(CategoryListView, self).get_queryset()


class CategoryDetailView(generic.DetailView):
    model
= models.Category
    slug_field
= 'full_slug'

    template_name = 'market/category/detail.html'


class ProductListView(generic.ListView):
    model
= models.Product

    template_name
= 'market/product/list.html'


class ProductDetailView(generic.DetailView):
    model
= models.Product

    slug_field
= 'categories__full_slug'

    template_name = 'market/product/detail.html'

   
""" Это можно не читать, так как что с этим, что без этого - не работает
    def get_queryset(self):
        slug =
str(self.kwargs.get('slug')).split('/')[-1]
        products =
self.model.objects.filter(
           
published=True,
           
slug=slug
        ).annotate(
full_slug=functions.Concat('categories__full_slug', Value('/'), 'slug'))
       
return products

   
def get_object(self, queryset=None):
       
return True
    """



Вадим

unread,
Mar 1, 2017, 9:10:47 PM3/1/17
to Django russian
Если список категорий у товара бедет меняться, то будет меняться и его урл. Это плохой паттерн. 
Делай основную категорию, которой товар будет однозначно определяться, и используй в урл только ее.

среда, 1 марта 2017 г., 13:02:21 UTC+2 пользователь Za Ars написал:

Za Ars

unread,
Mar 2, 2017, 6:45:44 AM3/2/17
to django-...@googlegroups.com
Сосбтвенно так и сделал ) А остальное через метки

2 марта 2017 г., 5:10 пользователь Вадим <va.se...@gmail.com> написал:

--
Вы получили это сообщение, поскольку подписаны на одну из тем в группе "Django russian".
Чтобы отменить подписку на эту тему, перейдите по ссылке https://groups.google.com/d/topic/django-russian/Zjg6-R2NnRg/unsubscribe.
Чтобы отменить подписку на эту группу и все ее темы, отправьте письмо на электронный адрес django-russian+unsubscribe@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages