model = PageProductList
+class DynamicContentPageInline(TabularDynamicInlineAdmin):
+
+ model = DynamicContentPage
+ form = DynamicContentPageForm
+
+ class Media:
+ js = (
+ static("mezzanine/js/admin/dynamic_inline.js"),
+ )
+
+
class CustomPageAdmin(PageAdmin):
inlines = [PageBlockInline,
PageVideoInline,
PageLinkInline,
PersonListBlockAutocompleteInlineAdmin,
- PageProductListInline
+ PageProductListInline,
+ DynamicContentPageInline
]
from mezzanine.core.models import Orderable
from organization.magazine.models import Article, Topic, Brief
from organization.pages.models import CustomPage
-from organization.pages.models import DynamicContentHomeSlider, DynamicContentHomeBody
+from organization.pages.models import *
from organization.agenda.models import Event
class DynamicContentHomeSliderForm(autocomplete.FutureModelForm):
class Meta:
model = DynamicContentHomeBody
fields = ('content_object',)
+
+
+class DynamicContentPageForm(autocomplete.FutureModelForm):
+
+ content_object = dal_queryset_sequence.fields.QuerySetSequenceModelField(
+ queryset=autocomplete.QuerySetSequence(
+ Article.objects.all(),
+ CustomPage.objects.all(),
+ Event.objects.all()
+ ),
+ required=False,
+ widget=dal_select2_queryset_sequence.widgets.QuerySetSequenceSelect2('dynamic-content-page'),
+ )
+
+ class Meta:
+ model = DynamicContentPage
+ fields = ('content_object',)
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.10 on 2016-10-07 10:44
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import mezzanine.core.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('contenttypes', '0002_remove_content_type_name'),
+ ('pages', '0005_auto_20160923_1219'),
+ ('organization-pages', '0004_auto_20160928_1858'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='DynamicContentPage',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')),
+ ('object_id', models.PositiveIntegerField(editable=False, null=True, verbose_name='related object')),
+ ('content_type', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='content type')),
+ ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dynamic_content_pages', to='pages.Page', verbose_name='page')),
+ ],
+ options={
+ 'ordering': ('_order',),
+ 'verbose_name': 'Dynamic Content Page',
+ },
+ ),
+ ]
order_with_respect_to = "page"
+class DynamicContentPage(DynamicContent, Orderable):
+
+ page = models.ForeignKey(Page, verbose_name=_('page'), related_name='dynamic_content_pages', blank=True, null=True, on_delete=models.SET_NULL)
+
+ class Meta:
+ verbose_name = 'Dynamic Content Page'
+
+
class LinkImage(models.Model):
link = models.ForeignKey(MezzanineLink, verbose_name=_('link'), related_name='link_images', blank=True, null=True, on_delete=models.SET_NULL)
pass
+@register(DynamicContentPage)
+class DynamicContentPageTranslationOptions(TranslationOptions):
+
+ pass
+
+
@register(LinkImage)
class LinkImageTranslationOptions(TranslationOptions):
url("^$", HomeView.as_view(), name="home"),
url("^dynamic-content-home-slider/$", permission_required('home.can_edit')(DynamicContentHomeSliderView.as_view()), name='dynamic-content-home-slider'),
url("^dynamic-content-home-body/$", permission_required('home.can_edit')(DynamicContentHomeBodyView.as_view()), name='dynamic-content-home-body'),
+ url("^dynamic-content-page/$", permission_required('page.can_edit')(DynamicContentPageView.as_view()), name='dynamic-content-page'),
url("^home/$", HomeView.as_view(), name='organization-home'),
url("^newsletter/$", NewsletterView.as_view(), name='organization-newsletter'),
]
class NewsletterView(TemplateView):
template_name = "pages/newsletter.html"
+
+
+class DynamicContentPageView(Select2QuerySetSequenceView):
+
+ def get_queryset(self):
+
+ articles = Article.objects.all()
+ custompage = CustomPage.objects.all()
+ events = Event.objects.all()
+
+ if self.q:
+ articles = articles.filter(title__icontains=self.q)
+ custompage = custompage.filter(title__icontains=self.q)
+ events = events.filter(title__icontains=self.q)
+
+ qs = autocomplete.QuerySetSequence(articles, custompage, events)
+
+ if self.q:
+ qs = qs.filter(title__icontains=self.q)
+
+ qs = self.mixup_querysets(qs)
+
+ return qs
--- /dev/null
+{% load i18n mezzanine_tags keyword_tags organization_tags pages_tags %}
+{% if dynamic_content.all %}
+ <hr class="mt0 mb0" />
+ <div class="white-bg pb2">
+ <div class="container">
+ <div class="row tac">
+ <div class="col-xs-12">
+ <h2 class="dashed dashed--center mt2">{% trans "Also discover" %}</h2>
+ </div>
+ </div>
+ <div class="row tac">
+ {% for content in dynamic_content %}
+ {% if content.content_model == "article" %}
+ <div class="col-lg-3 col-md-4 col-sm-4 col-xs-6">
+ {% include 'magazine/article/includes/article_card.html' %}
+ </div>
+ {% else %}
+ <div class="col-lg-3 col-md-4 col-sm-4 col-xs-6">
+ {% include "core/inc/generic_card.html" %}
+ </div>
+ {%endif%}
+ {% endfor %}
+ </div>
+ </div>
+ </div>
+{% endif %}
{% endwith %}
{% endblock %}
+{% block page_related_content %}
+ {{ block.super }}
+{% endblock %}
+
{% block products %}
{% for page_product_list in page.custompage.product_lists.all %}
{% with page_product_list.list as list %}
{% endwith %}
{% endblock %}
{% block page_related_content %}
+ {% with page.dynamic_content_pages.all as dynamic_content %}
+ {% include "core/inc/related_content.html" %}
+ {% endwith %}
{% endblock %}
{% block related_project %}
{% endblock %}