]> git.parisson.com Git - mezzo.git/commitdiff
Brief: add autocomplete fields on Events, Articles and BasicPage for local links
authorEmilie <zawadzki@ircam.fr>
Thu, 18 Aug 2016 10:43:47 +0000 (12:43 +0200)
committerEmilie <zawadzki@ircam.fr>
Thu, 18 Aug 2016 10:43:47 +0000 (12:43 +0200)
17 files changed:
app/organization/magazine/admin.py
app/organization/magazine/forms.py
app/organization/magazine/migrations/0014_auto_20160818_1124.py [new file with mode: 0644]
app/organization/magazine/migrations/0015_auto_20160818_1131.py [new file with mode: 0644]
app/organization/magazine/migrations/0016_auto_20160818_1230.py [new file with mode: 0644]
app/organization/magazine/migrations/0017_brief_external_content.py [new file with mode: 0644]
app/organization/magazine/migrations/0018_auto_20160818_1232.py [new file with mode: 0644]
app/organization/magazine/migrations/0019_auto_20160818_1233.py [new file with mode: 0644]
app/organization/magazine/migrations/0020_auto_20160818_1238.py [new file with mode: 0644]
app/organization/magazine/models.py
app/organization/magazine/translation.py
app/organization/magazine/views.py
app/organization/project/migrations/0005_auto_20160818_1118.py [new file with mode: 0644]
app/scripts/app.sh
app/templates/magazine/brief/brief_detail.html
app/templates/magazine/brief/brief_list.html
requirements.txt

index fe2d6a7d719e8aeb0d87cee71050321fa72998dc..553b249a39af7a185592573c5b8f1f6cc046e0e2 100644 (file)
@@ -33,12 +33,10 @@ class BriefAdmin(admin.ModelAdmin): #OrderableTabularInline
 
 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)
index 4388d2b3079ff812b126229d3766368f16d3efd5..b47fb511acbce6162d29ce87b9bd8471a2098ad4 100644 (file)
@@ -4,7 +4,8 @@ import dal_queryset_sequence
 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):
 
@@ -16,7 +17,8 @@ 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,
diff --git a/app/organization/magazine/migrations/0014_auto_20160818_1124.py b/app/organization/magazine/migrations/0014_auto_20160818_1124.py
new file mode 100644 (file)
index 0000000..0a5f45e
--- /dev/null
@@ -0,0 +1,23 @@
+# -*- 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',
+        ),
+    ]
diff --git a/app/organization/magazine/migrations/0015_auto_20160818_1131.py b/app/organization/magazine/migrations/0015_auto_20160818_1131.py
new file mode 100644 (file)
index 0000000..45407e0
--- /dev/null
@@ -0,0 +1,26 @@
+# -*- 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'),
+        ),
+    ]
diff --git a/app/organization/magazine/migrations/0016_auto_20160818_1230.py b/app/organization/magazine/migrations/0016_auto_20160818_1230.py
new file mode 100644 (file)
index 0000000..5895165
--- /dev/null
@@ -0,0 +1,27 @@
+# -*- 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',
+        ),
+    ]
diff --git a/app/organization/magazine/migrations/0017_brief_external_content.py b/app/organization/magazine/migrations/0017_brief_external_content.py
new file mode 100644 (file)
index 0000000..8cfd436
--- /dev/null
@@ -0,0 +1,21 @@
+# -*- 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,
+        ),
+    ]
diff --git a/app/organization/magazine/migrations/0018_auto_20160818_1232.py b/app/organization/magazine/migrations/0018_auto_20160818_1232.py
new file mode 100644 (file)
index 0000000..759203f
--- /dev/null
@@ -0,0 +1,25 @@
+# -*- 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'),
+        ),
+    ]
diff --git a/app/organization/magazine/migrations/0019_auto_20160818_1233.py b/app/organization/magazine/migrations/0019_auto_20160818_1233.py
new file mode 100644 (file)
index 0000000..eaef703
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- 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'),
+        ),
+    ]
diff --git a/app/organization/magazine/migrations/0020_auto_20160818_1238.py b/app/organization/magazine/migrations/0020_auto_20160818_1238.py
new file mode 100644 (file)
index 0000000..b2a1b57
--- /dev/null
@@ -0,0 +1,30 @@
+# -*- 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'),
+        ),
+    ]
index 8bcc131426046416aeb57dd3d6622f8423dbe989..fe607bd448b7a8ad7b59916850a0c0ac7bb6bbad 100644 (file)
@@ -11,10 +11,6 @@ from mezzanine.core.models import RichText, Displayable, Slugged
 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
 
@@ -44,45 +40,34 @@ class Article(BlogPost, 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"""
 
index d2351c7745a723550e325633358d8d332d41d65b..063dc59e0dfe8fa6c5fae11f3d8b979cce51450d 100644 (file)
@@ -15,7 +15,7 @@ class ArticleTranslationOptions(TranslationOptions):
 @register(Brief)
 class BriefTranslationOptions(TranslationOptions):
 
-    fields = ('text_button', 'local_content')
+    fields = ('text_button', 'external_content', )
 
 @register(Topic)
 class TopicTranslationOptions(TranslationOptions):
index 945d4f644de7da8197c74679772540e4ad879bae..be89739c88479833cf33cfc27e75727b0c6af573 100644 (file)
@@ -8,15 +8,14 @@ from django.views.generic.base import *
 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):
 
@@ -89,17 +88,16 @@ class TopicDetailView(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
@@ -108,5 +106,5 @@ class ObjectAutocomplete(Select2QuerySetSequenceView):
         # This will limit each queryset so that they show an equal number
         # of results.
         qs = self.mixup_querysets(qs)
-        # print(qs)
+
         return qs
diff --git a/app/organization/project/migrations/0005_auto_20160818_1118.py b/app/organization/project/migrations/0005_auto_20160818_1118.py
new file mode 100644 (file)
index 0000000..6f44e01
--- /dev/null
@@ -0,0 +1,53 @@
+# -*- 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'),
+        ),
+    ]
index 96d6ad6f179e5d4f845a6f49d7a7c0d103829011..4abdaee0f0cedfec9d5616be9ecbdc9b29f81fa4 100644 (file)
@@ -22,8 +22,8 @@ patterns='*.js;*.css;*.jpg;*.jpeg;*.gif;*.png;*.svg;*.ttf;*.eot;*.woff;*.woff2'
 # 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
 
index 3d5d3b186d1da956bcff7ffc9894677aba3d1416..6a9089b9197f16c4080dc0996edb8090b2c2b793 100644 (file)
@@ -1,7 +1,7 @@
 {% 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 }}">
@@ -17,6 +17,6 @@
             </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>
index a0f3b45ac294aa121d7ddd6150a9a101c3c50160..e1221e20c211b1217bec6cf5e1fda5e495547531 100644 (file)
@@ -1,5 +1,5 @@
 {% 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 %}
index bff2131627ce6168956c137ca449663b7b4e1536..5d46cf12cc27662ddf322decb987e19af2a0c695 100644 (file)
@@ -12,3 +12,5 @@ django-bower
 django-debug-toolbar
 django-extensions
 django-countries
+django-querysetsequence
+django-autocomplete-light