class BriefAdminDisplayable(BaseTranslationModelAdmin,): #, OrderableAdmin
- #list_display = ('title', 'local_content', 'sort_order_display',)
+ list_display = ('title', 'external_content', 'content_object', )
form = BriefForm
fieldsets = deepcopy(BriefAdmin.fieldsets)
- # form = BriefForm
- # form = autocomplete_light.modelform_factory(Brief)
admin.site.register(Article, ArticleAdminDisplayable)
import dal_select2_queryset_sequence
from organization.magazine.models import Article, Topic, Brief
-
+from organization.core.models import BasicPage
+from mezzanine_agenda.models import Event
class BriefForm(autocomplete.FutureModelForm):
content_object = dal_queryset_sequence.fields.QuerySetSequenceModelField(
queryset=autocomplete.QuerySetSequence(
Article.objects.all(),
- Topic.objects.all(),
+ Event.objects.all(),
+ BasicPage.objects.all(),
# ContentType.objects.all(),
),
required=False,
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-18 09:24
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-magazine', '0013_auto_20160812_1813'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='brief',
+ options={'verbose_name': 'brief'},
+ ),
+ migrations.RemoveField(
+ model_name='brief',
+ name='sort_order',
+ ),
+ ]
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-18 09:31
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-magazine', '0014_auto_20160818_1124'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='brief',
+ name='content_type',
+ field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='content page'),
+ ),
+ migrations.AlterField(
+ model_name='brief',
+ name='object_id',
+ field=models.PositiveIntegerField(editable=False, null=True, verbose_name='related object'),
+ ),
+ ]
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-18 10:30
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-magazine', '0015_auto_20160818_1131'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='brief',
+ name='local_content',
+ ),
+ migrations.RemoveField(
+ model_name='brief',
+ name='local_content_en',
+ ),
+ migrations.RemoveField(
+ model_name='brief',
+ name='local_content_fr',
+ ),
+ ]
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-18 10:31
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-magazine', '0016_auto_20160818_1230'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='brief',
+ name='external_content',
+ field=models.URLField(default=1, max_length=1000, verbose_name='external content'),
+ preserve_default=False,
+ ),
+ ]
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-18 10:32
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-magazine', '0017_brief_external_content'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='brief',
+ name='external_content_en',
+ field=models.URLField(max_length=1000, null=True, verbose_name='external content'),
+ ),
+ migrations.AddField(
+ model_name='brief',
+ name='external_content_fr',
+ field=models.URLField(max_length=1000, null=True, verbose_name='external content'),
+ ),
+ ]
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-18 10:33
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-magazine', '0018_auto_20160818_1232'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='brief',
+ name='external_content',
+ field=models.URLField(max_length=1000, null=True, verbose_name='external content'),
+ ),
+ ]
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-18 10:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-magazine', '0019_auto_20160818_1233'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='brief',
+ name='external_content',
+ field=models.URLField(blank=True, max_length=1000, verbose_name='external content'),
+ ),
+ migrations.AlterField(
+ model_name='brief',
+ name='external_content_en',
+ field=models.URLField(blank=True, max_length=1000, null=True, verbose_name='external content'),
+ ),
+ migrations.AlterField(
+ model_name='brief',
+ name='external_content_fr',
+ field=models.URLField(blank=True, max_length=1000, null=True, verbose_name='external content'),
+ ),
+ ]
from mezzanine.pages.models import Page
from mezzanine.blog.models import BlogPost
#from orderable.models import Orderable
-# from autocomplete.dal_queryset_sequence.fields import (
-# QuerySetSequenceModelField,
-# QuerySetSequenceModelMultipleField,
-# )
from organization.core.models import Named, Description, Image
from organization.media.models import Photo
class Brief(Displayable, RichText): #Orderable
text_button = models.CharField(blank=True, max_length=150, null=False, verbose_name='text button')
- local_content = models.URLField(blank=False, max_length=1000, null=False, verbose_name='local content')
+ external_content = models.URLField(blank=True, max_length=1000, null=False, verbose_name='external content')
- limit = models.Q(app_label='organization-magazine', model='article') | \
- models.Q(app_label='organization-magazine', model='topic')
+ # used for autocomplete but hidden in admin
content_type = models.ForeignKey(
ContentType,
verbose_name=_('content page'),
- limit_choices_to=limit,
null=True,
blank=True,
+ editable=False,
)
+
+ # used for autocomplete but hidden in admin
object_id = models.PositiveIntegerField(
verbose_name=_('related object'),
null=True,
+ editable=False,
)
- content_object = GenericForeignKey('content_type', 'object_id')
+ content_object = GenericForeignKey('content_type', 'object_id')
def get_absolute_url(self):
- return self.local_content
+ return self.external_content
class Meta:
verbose_name = _('brief')
#ordering = ['sort_order']
-
-# class BriefForm(forms.ModelForm):
-#
-# selected_object = forms.ModelChoiceField(
-# queryset=ContentType.objects.all(),
-# widget=autocomplete.ModelSelect2(url='object-autocomplete')
-# )
-#
-# class Meta:
-# model = Brief
-# fields = ('__all__')
-
-
class Topic(Page, RichText):
"""Topic for magazine menu"""
@register(Brief)
class BriefTranslationOptions(TranslationOptions):
- fields = ('text_button', 'local_content')
+ fields = ('text_button', 'external_content', )
@register(Topic)
class TopicTranslationOptions(TranslationOptions):
from django.shortcuts import get_object_or_404
from itertools import chain
from dal import autocomplete
-
+from dal_select2_queryset_sequence.views import Select2QuerySetSequenceView
+from mezzanine_agenda.models import Event
from organization.magazine.models import Article, Topic, Brief
from organization.team.models import Department
-
+from organization.core.models import BasicPage
from organization.core.views import SlugMixin
from django.template.defaultfilters import slugify
-from dal import autocomplete
-from dal_select2_queryset_sequence.views import Select2QuerySetSequenceView
class ArticleDetailView(SlugMixin, DetailView):
class ObjectAutocomplete(Select2QuerySetSequenceView):
def get_queryset(self):
- #qs = chain(Topic.objects.all(), Article.objects.all())
- #qs = Article.objects.all()
articles = Article.objects.all()
- topics = Topic.objects.all()
+ basicpage = BasicPage.objects.all()
+ events = Event.objects.all()
if self.q:
- #qs = qs.filter(name__istartswith=self.q)
articles = articles.filter(title__icontains=self.q)
- topics = topics.filter(title__icontains=self.q)
+ basicpage = basicpage.filter(title__icontains=self.q)
+ events = events.filter(title__icontains=self.q)
- qs = autocomplete.QuerySetSequence(articles, topics)
+ qs = autocomplete.QuerySetSequence(articles, basicpage, events )
if self.q:
# This would apply the filter on all the querysets
# This will limit each queryset so that they show an equal number
# of results.
qs = self.mixup_querysets(qs)
- # print(qs)
+
return qs
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-18 09:18
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-team', '0016_auto_20160812_1521'),
+ ('organization-project', '0004_auto_20160809_1413'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='project',
+ name='leader_team',
+ ),
+ migrations.RemoveField(
+ model_name='project',
+ name='partner_organizations',
+ ),
+ migrations.RemoveField(
+ model_name='project',
+ name='partner_persons',
+ ),
+ migrations.RemoveField(
+ model_name='project',
+ name='partner_teams',
+ ),
+ migrations.AddField(
+ model_name='project',
+ name='lead_team',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='leader_projects', to='organization-team.Team', verbose_name='lead team'),
+ ),
+ migrations.AddField(
+ model_name='project',
+ name='organizations',
+ field=models.ManyToManyField(blank=True, to='organization-team.Organization', verbose_name='organizations'),
+ ),
+ migrations.AddField(
+ model_name='project',
+ name='persons',
+ field=models.ManyToManyField(blank=True, to='organization-team.Person', verbose_name='persons'),
+ ),
+ migrations.AddField(
+ model_name='project',
+ name='teams',
+ field=models.ManyToManyField(blank=True, related_name='patner_projects', to='organization-team.Team', verbose_name='teams'),
+ ),
+ ]
# pip install -U https://forge.ircam.fr/p/django-eve/source/download/dev/
# pip install -U https://github.com/stephenmcd/grappelli-safe/archive/dynamic_stacked.zip
# pip install django-querysetsequence
-pip install django-autocomplete-light django-querysetsequence
-/usr/bin/yes | pip uninstall django-orderable
+#pip install django-autocomplete-light django-querysetsequence
+#/usr/bin/yes | pip uninstall django-orderable
chown -R $uid:$gid $media
{% load i18n pages_tags mezzanine_tags %}
<div class="brief__item {% if not on_home %}msry__item {% endif %}">
<div class="brief__item__inner">
- <a target="_blank" href="{{ brief.local_content}}" class="brief__item__inner">
+ <a target="_blank" href="{{ brief.external_content}}" class="brief__item__inner">
{% if brief.featured_image %}
<figure class="brief__item__img">
<img src="{{ MEDIA_URL }}{% thumbnail brief.featured_image 500 0 %}" alt="brief: {{ brief.title }}">
</p>
</a>
- <a href="{{ brief.local_content}}" class="btn btn-full">{{ brief.text_button }}</a>
+ <a href="{{ brief.external_content}}" class="btn btn-full">{{ brief.text_button }}</a>
</div>
</div>
{% for brief in briefs %}
<h2>{{ brief.title }}</h2>
<p>{{ brief.description|truncatechars:100 }}</p>
- <a href="{{ brief.local_content }}" title="brief.title">{{ brief.text_button }}</a>
+ <a href="{{ brief.external_content }}" title="brief.title">{{ brief.text_button }}</a>
{% endfor %}
django-debug-toolbar
django-extensions
django-countries
+django-querysetsequence
+django-autocomplete-light