def get(self, request, obj_id=None): from apps.realms import get_realms if obj_id is None: # Запрошен список всех известных категорий. item = get_category_lists( init_kwargs={ 'show_title': True, 'show_links': lambda cat: reverse(self.realm.get_details_urlname(), args=[cat.id]) }, additional_parents_aliases=get_category_aliases_under()) return self.render(request, {'item': item}) # Выводим список материалов (разбитых по областям сайта) для конкретной категории. category_model = get_category_model() category = get_object_or_404(category_model.objects.select_related('parent'), pk=obj_id) realm_list = [] for realm in get_realms(): if hasattr(realm.model, 'categories'): # ModelWithCategory objs = realm.model.get_objects_in_category(category)[:5] if objs: realm_list.append({ 'objects': objs, 'url': reverse(realm.get_tags_urlname(), args=[category.id]), 'realm': realm }) return self.render(request, {self.realm.name: category, 'item': category, 'realm_list': realm_list})
def get(self, request, obj_id=None): from apps.realms import get_realms realms = get_realms().values() if obj_id is None: # Запрошен список всех известных категорий. item = get_category_lists( init_kwargs={ 'show_title': True, 'show_links': lambda cat: reverse(self.realm.get_details_urlname(), args=[cat.id]) }, additional_parents_aliases=get_category_aliases_under()) return self.render(request, {'item': item, 'realms': realms}) # Выводим список материалов (разбитых по областям сайта) для конкретной категории. category = get_object_or_404(Category.objects.select_related('parent'), pk=obj_id) realms_links = OrderedDict() for realm in realms: realm_model = realm.model if not hasattr(realm_model, 'categories'): # ModelWithCategory continue items = realm_model.get_objects_in_category(category) if not items: continue realm_title = realm_model.get_verbose_name_plural() _, plural = realm.get_names() realms_links[realm_title] = (plural, items) return self.render(request, {self.realm.name: category, 'item': category, 'realms_links': realms_links})
def test_get_category_aliases_under(self, create_category): cat1 = create_category(alias='cat1',) cat2 = create_category(alias='cat2',) cat3 = create_category(alias='cat3') cat11 = create_category(alias='cat11', parent=cat1) cat111 = create_category(parent=cat1) root = get_category_aliases_under() assert len(root) == 3 assert 'cat1' in root assert 'cat2' in root assert 'cat3' in root under_cat1 = get_category_aliases_under('cat1') assert len(under_cat1) == 1 assert 'cat11' in under_cat1
def test_get_category_aliases_under(self, create_category): cat1 = create_category(alias='cat1', ) cat2 = create_category(alias='cat2', ) cat3 = create_category(alias='cat3') cat11 = create_category(alias='cat11', parent=cat1) cat111 = create_category(parent=cat1) root = get_category_aliases_under() assert len(root) == 3 assert 'cat1' in root assert 'cat2' in root assert 'cat3' in root under_cat1 = get_category_aliases_under('cat1') assert len(under_cat1) == 1 assert 'cat11' in under_cat1
def test_get_category_aliases_under(self): cat1 = create_category(alias='cat1',) cat2 = create_category(alias='cat2',) cat3 = create_category(alias='cat3') cat11 = create_category(alias='cat11', parent=cat1) cat111 = create_category(parent=cat1) root = get_category_aliases_under() self.assertEqual(len(root), 3) self.assertIn('cat1', root) self.assertIn('cat2', root) self.assertIn('cat3', root) under_cat1 = get_category_aliases_under('cat1') self.assertEqual(len(under_cat1), 1) self.assertIn('cat11', under_cat1)
def get(self, request, obj_id=None): item = None if obj_id is not None: item = self.get_object_or_404(obj_id) data = request.POST or None form = self.realm.form(data, request.FILES or None, instance=item, user=request.user) if item is None: form.submit_title = self.realm.txt_form_add else: self.check_edit_permissions(request, item) form.submit_title = self.realm.txt_form_edit xross_listener(item=item) from sitecats.toolbox import get_category_aliases_under if isinstance(item, ModelWithCategory): item.has_categories = True category_handled = item.enable_category_lists_editor(request, additional_parents_aliases=get_category_aliases_under(), handler_init_kwargs={'error_messages_extra_tags': 'alert alert-danger'}, lists_init_kwargs={'show_title': True, 'cat_html_class': 'label label-default'}, editor_init_kwargs={'allow_add': True, 'allow_new': request.user.is_superuser, 'allow_remove': True,}) if category_handled: # Добавилась категория, перенаправим на эту же страницу. return redirect(self.realm.get_edit_urlname(), item.id, permanent=True) show_modetation_hint = self.realm.model not in (User, Article, Opinion, Community) if data is None: if show_modetation_hint: message_warning(request, 'Обратите внимание, что на данном этапе развития проекта добавляемые материалы проходят модерацию, прежде чем появиться на сайте.') if form.is_valid(): if item is None: form.instance.submitter = request.user item = form.save() message_success(request, 'Объект добавлен.') if show_modetation_hint: message_info(request, 'Данный объект появится на сайте после модерации.') return redirect(item, permanent=True) else: form.instance.last_editor = request.user form.save() message_success(request, 'Данные сохранены.') return redirect(self.realm.get_edit_urlname(), item.id, permanent=True) return self.render(request, {'form': form, self.realm.name: item, 'item': item})
def get(self, request: HttpRequest, obj_id: int = None): from .realms import get_realms realms = get_realms().values() if obj_id is None: # Запрошен список всех известных категорий. item = get_category_lists( init_kwargs={ 'show_title': True, 'show_links': lambda cat: reverse(self.realm.get_details_urlname(), args=[cat.id]) }, additional_parents_aliases=get_category_aliases_under()) return self.render(request, {'item': item, 'realms': realms}) # Выводим список материалов (разбитых по областям сайта) для конкретной категории. category = get_object_or_404(Category.objects.select_related('parent'), pk=obj_id) realms_links = {} for realm in realms: realm_model = realm.model if not hasattr(realm_model, 'categories'): # ModelWithCategory continue items = realm_model.get_objects_in_category(category) if not items: continue realm_title = realm_model.get_verbose_name_plural() _, plural = realm.get_names() realms_links[realm_title] = (plural, items) return self.render( request, { self.realm.name: category, 'item': category, 'realms_links': realms_links })
def get(self, request: HttpRequest, obj_id: Optional[int] = None) -> HttpResponse: item = None if obj_id is not None: item = self.get_object_or_404(obj_id) data = None if 'pythonz_form' in request.POST: data = request.POST form = self.realm.form(data, request.FILES or None, instance=item, user=request.user) if item is None: form.submit_title = self.realm.txt_form_add else: self.check_edit_permissions(request, item) form.submit_title = self.realm.txt_form_edit xross_listener(http_method='POST', item=item) if isinstance(item, ModelWithCategory): item.has_categories = True category_handled = item.enable_category_lists_editor( request, additional_parents_aliases=get_category_aliases_under(), handler_init_kwargs={ 'error_messages_extra_tags': 'alert alert-danger' }, lists_init_kwargs={ 'show_title': True, 'cat_html_class': 'label label-default' }, editor_init_kwargs={ 'allow_add': True, 'allow_new': request.user.is_superuser, 'allow_remove': True, 'category_separator': ', ' }) if category_handled: # Добавилась категория, перенаправим на эту же страницу. return redirect(self.realm.get_edit_urlname(), item.id, permanent=True) show_modetation_hint = self.realm.model not in (User, Article, Discussion, Community, Event) if data is None: if show_modetation_hint: message_warning( request, 'Обратите внимание, что на данном этапе развития проекта добавляемые ' 'материалы проходят модерацию, прежде чем появиться на сайте.' ) if item is None: redirector = lambda: redirect(item, permanent=True) else: redirector = lambda: redirect( self.realm.get_edit_urlname(), item.id, permanent=True) if form.is_valid(): try: if item is None: form.instance.submitter = request.user item = form.save() message_success(request, 'Объект добавлен.') if show_modetation_hint: message_info( request, 'Данный объект появится на сайте после модерации.') else: form.instance.last_editor = request.user form.save() message_success(request, 'Данные сохранены.') return redirector() except PythonzException as e: message_error(request, e.message) context = {'form': form, self.realm.name: item, 'item': item} try: self.update_context(context, request) except RedirectRequired: return redirector() return self.render(request, context)