]> git.parisson.com Git - mezzo.git/commitdiff
Person Block : Simple autocomplete on one FK instead on GFK
authorEmilie <zawadzki@ircam.fr>
Fri, 16 Sep 2016 16:29:07 +0000 (18:29 +0200)
committerEmilie <zawadzki@ircam.fr>
Fri, 16 Sep 2016 16:29:07 +0000 (18:29 +0200)
17 files changed:
app/organization/network/admin.py
app/organization/network/forms.py
app/organization/network/migrations/0009_personlistblock_page.py [new file with mode: 0644]
app/organization/network/migrations/0010_personautocomplete.py [new file with mode: 0644]
app/organization/network/migrations/0011_personautocomplete_persons.py [new file with mode: 0644]
app/organization/network/migrations/0012_auto_20160916_1456.py [new file with mode: 0644]
app/organization/network/migrations/0013_auto_20160916_1715.py [new file with mode: 0644]
app/organization/network/migrations/0014_auto_20160916_1719.py [new file with mode: 0644]
app/organization/network/migrations/0015_auto_20160916_1732.py [new file with mode: 0644]
app/organization/network/migrations/0016_auto_20160916_1741.py [new file with mode: 0644]
app/organization/network/migrations/0017_personlistblock_person_list_block.py [new file with mode: 0644]
app/organization/network/migrations/0018_auto_20160916_1813.py [new file with mode: 0644]
app/organization/network/models.py
app/organization/network/translation.py
app/organization/network/urls.py
app/organization/network/views.py
app/organization/pages/admin.py

index 78ee16dd7ad0d6dbbc64f5c112edf5984921b4a1..1edef9614e936dfb58d3b11d17a163a04457a463 100644 (file)
@@ -117,23 +117,15 @@ class PersonAdmin(BaseTranslationModelAdmin):
         return res
 
 
-class DynamicContentPersonListInline(TabularDynamicInlineAdmin):
+class PersonAutocompleteInline(TabularDynamicInlineAdmin):
 
-    model = DynamicPersonList
-    form = DynamicPersonListForm
-
-    class Media:
-        js = (
-            static("mezzanine/js/admin/dynamic_inline.js"),
-            static("mezzanine/js/jquery-ui-1.9.2.min.js"),
-        )
+    model = PersonAutocomplete
+    form = PersonAutocompleteForm
 
 
 class PersonListBlockAdmin(admin.ModelAdmin):
 
-    inlines = [DynamicContentPersonListInline, ]
-
-
+    inlines = [PersonAutocompleteInline,]
 
 
 admin.site.register(Organization, OrganizationAdmin)
index ce6461e1e986f33dd2e1871f0b0a6a4098924523..2872e579a8c762f2e0b5e8303c4d6ae9b7700258 100644 (file)
@@ -5,40 +5,29 @@ from django import forms
 from django.forms.widgets import HiddenInput
 from django.forms import ModelForm
 from mezzanine.core.models import Orderable
-from organization.network.models import Person
-from organization.network.models import PersonListBlock, DynamicPersonList #DynamicContentPersonList,
-from organization.pages.models import DynamicPersonListBlockPage
-
-
-class DynamicPersonListForm(autocomplete.FutureModelForm):
-    """
-    List of Person
-    """
-    content_object = dal_queryset_sequence.fields.QuerySetSequenceModelField(
-        queryset=autocomplete.QuerySetSequence(
-            Person.objects.all(),
-        ),
-        required=False,
-        widget=dal_select2_queryset_sequence.widgets.QuerySetSequenceSelect2('dynamic-person-list'),
+from organization.network.models import Person, PersonListBlock, DynamicPersonList, PersonAutocomplete #DynamicContentPersonList,
+from organization.pages.models import DynamicPersonListBlockPage, Page
+
+
+class PagePersonListForm(forms.ModelForm):
+
+    person_list_block = forms.ModelChoiceField(
+        queryset=PersonListBlock.objects.all(),
+        widget=autocomplete.ModelSelect2(url='person-list-block-autocomplete')
     )
 
     class Meta:
-        model = DynamicPersonList
-        fields = ('content_object',)
-
-
-class DynamicContentPersonListBlockForm(autocomplete.FutureModelForm):
-    """
-    List of PersonListBlock
-    """
-    content_object = dal_queryset_sequence.fields.QuerySetSequenceModelField(
-        queryset=autocomplete.QuerySetSequence(
-            PersonListBlock.objects.all(),
-        ),
-        required=False,
-        widget=dal_select2_queryset_sequence.widgets.QuerySetSequenceSelect2('dynamic-content-person-list-block'),
+        model = Page
+        fields = ('person_list_block',)
+
+
+class PersonAutocompleteForm(forms.ModelForm):
+
+    person = forms.ModelChoiceField(
+        queryset=Person.objects.all(),
+        widget=autocomplete.ModelSelect2(url='person-autocomplete')
     )
 
     class Meta:
-        model = DynamicPersonListBlockPage
-        fields = ('content_object',)
+        model = PersonAutocomplete
+        fields = ('__all__')
diff --git a/app/organization/network/migrations/0009_personlistblock_page.py b/app/organization/network/migrations/0009_personlistblock_page.py
new file mode 100644 (file)
index 0000000..341e817
--- /dev/null
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-16 11:06
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('pages', '0004_auto_20160804_1547'),
+        ('organization-network', '0008_auto_20160916_1129'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='personlistblock',
+            name='page',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='person_list_block', to='pages.Page', verbose_name='Page'),
+        ),
+    ]
diff --git a/app/organization/network/migrations/0010_personautocomplete.py b/app/organization/network/migrations/0010_personautocomplete.py
new file mode 100644 (file)
index 0000000..940cdf1
--- /dev/null
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-16 12:40
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-network', '0009_personlistblock_page'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='PersonAutocomplete',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('person_list_block', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='person_autocomplete', to='organization-network.PersonListBlock', verbose_name='Person List Block')),
+            ],
+            options={
+                'verbose_name': 'Person autocomplete',
+            },
+        ),
+    ]
diff --git a/app/organization/network/migrations/0011_personautocomplete_persons.py b/app/organization/network/migrations/0011_personautocomplete_persons.py
new file mode 100644 (file)
index 0000000..5e5955b
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-16 12:46
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-network', '0010_personautocomplete'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='personautocomplete',
+            name='persons',
+            field=models.ManyToManyField(to='organization-network.Person'),
+        ),
+    ]
diff --git a/app/organization/network/migrations/0012_auto_20160916_1456.py b/app/organization/network/migrations/0012_auto_20160916_1456.py
new file mode 100644 (file)
index 0000000..eb675f9
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-16 12:56
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-network', '0011_personautocomplete_persons'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='personautocomplete',
+            old_name='persons',
+            new_name='person',
+        ),
+    ]
diff --git a/app/organization/network/migrations/0013_auto_20160916_1715.py b/app/organization/network/migrations/0013_auto_20160916_1715.py
new file mode 100644 (file)
index 0000000..8ee57f6
--- /dev/null
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-16 15:15
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-network', '0012_auto_20160916_1456'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='personautocomplete',
+            name='person',
+        ),
+        migrations.AddField(
+            model_name='personlistblock',
+            name='persons',
+            field=models.ManyToManyField(to='organization-network.Person'),
+        ),
+    ]
diff --git a/app/organization/network/migrations/0014_auto_20160916_1719.py b/app/organization/network/migrations/0014_auto_20160916_1719.py
new file mode 100644 (file)
index 0000000..1857ef0
--- /dev/null
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-16 15:19
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-network', '0013_auto_20160916_1715'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='personlistblock',
+            name='persons',
+        ),
+        migrations.AddField(
+            model_name='personautocomplete',
+            name='person',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='organization-network.Person'),
+            preserve_default=False,
+        ),
+    ]
diff --git a/app/organization/network/migrations/0015_auto_20160916_1732.py b/app/organization/network/migrations/0015_auto_20160916_1732.py
new file mode 100644 (file)
index 0000000..dfb0aca
--- /dev/null
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-16 15:32
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-network', '0014_auto_20160916_1719'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='personautocomplete',
+            name='person',
+        ),
+        migrations.AddField(
+            model_name='personlistblock',
+            name='person',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='organization-network.Person'),
+            preserve_default=False,
+        ),
+    ]
diff --git a/app/organization/network/migrations/0016_auto_20160916_1741.py b/app/organization/network/migrations/0016_auto_20160916_1741.py
new file mode 100644 (file)
index 0000000..f2bd776
--- /dev/null
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-16 15:41
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-network', '0015_auto_20160916_1732'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='personlistblock',
+            name='person',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='person_list_block', to='organization-network.Person', verbose_name='Person'),
+        ),
+    ]
diff --git a/app/organization/network/migrations/0017_personlistblock_person_list_block.py b/app/organization/network/migrations/0017_personlistblock_person_list_block.py
new file mode 100644 (file)
index 0000000..f1cad22
--- /dev/null
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-16 16:02
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-network', '0016_auto_20160916_1741'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='personlistblock',
+            name='person_list_block',
+            field=models.ForeignKey(default=7, on_delete=django.db.models.deletion.CASCADE, to='organization-network.PersonListBlock'),
+            preserve_default=False,
+        ),
+    ]
diff --git a/app/organization/network/migrations/0018_auto_20160916_1813.py b/app/organization/network/migrations/0018_auto_20160916_1813.py
new file mode 100644 (file)
index 0000000..0927472
--- /dev/null
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-16 16:13
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-network', '0017_personlistblock_person_list_block'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='personlistblock',
+            name='person',
+        ),
+        migrations.RemoveField(
+            model_name='personlistblock',
+            name='person_list_block',
+        ),
+        migrations.AddField(
+            model_name='personautocomplete',
+            name='person',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='person_list_block', to='organization-network.Person', verbose_name='Person'),
+        ),
+    ]
index d22c3da37eacc0101e1929740169d7808c7089c1..dd30ba57a79b64cfa37b605180eec162831a5a1b 100644 (file)
@@ -229,6 +229,8 @@ class PersonBlock(Block):
 
 class PersonListBlock(Titled):
 
+    page = models.ForeignKey(Page, verbose_name=_('Page'), related_name='person_list_block', blank=True, null=True, on_delete=models.SET_NULL)
+
     class Meta:
         verbose_name = _('Person List')
 
@@ -236,6 +238,15 @@ class PersonListBlock(Titled):
         return self.title
 
 
+class PersonAutocomplete(models.Model):
+
+    person_list_block = models.ForeignKey(PersonListBlock, verbose_name=_('Person List Block'), related_name='person_autocomplete', blank=True, null=True, on_delete=models.SET_NULL)
+    person = models.ForeignKey(Person, verbose_name=_('Person'), related_name='person_list_block', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _('Person autocomplete')
+
+
 class DynamicPersonList(DynamicContent, Orderable):
 
     person_list_block = models.ForeignKey("PersonListBlock", verbose_name=_('Person List Block'), related_name='dynamic_person_list', blank=True, null=True, on_delete=models.SET_NULL)
index faf9564df5f0c5c4f85de279f5a3fea313562f2e..dc8d05b9e45d22531fd887488b05eb81fab280b8 100644 (file)
@@ -115,3 +115,9 @@ class DynamicPersonListTranslationOptions(TranslationOptions):
 class PersonListBlockTranslationOptions(TranslationOptions):
 
     pass
+
+
+@register(PersonAutocomplete)
+class PersonListBlockTranslationOptions(TranslationOptions):
+
+    pass
index 01e7e04869f1df18e08b1cefb239144cada01da6..b14117645bb89d30589476ab8bd0a063ae7ff3a7 100644 (file)
@@ -13,7 +13,6 @@ from organization.network.views import *
 urlpatterns = [
     url(r'^(?P<department>.*)/teams/$', TeamListView.as_view(), name="organization-network-team-list"),
     url(r'^person/(?P<slug>.*)/$', PersonDetailView.as_view(), name="organization-network-person-detail"),
-    url("^dynamic-person-list/$", DynamicPersonListView.as_view(), name='dynamic-person-list'),
-    url("^dynamic-content-person-list-block/$", DynamicContentPersonListBlockView.as_view(), name='dynamic-content-person-list-block'),
-
+    url("^person-list-block-autocomplete/$", PersonListBlockAutocompleteView.as_view(), name='person-list-block-autocomplete'),
+    url("^person-autocomplete/$", PersonListView.as_view(), name='person-autocomplete'),
     ]
index 68ae2403e7b7a79d2795ffaa999027ec9d09ef09..16233caefcbc483c4f053ce8f1c0f8864f28037a 100644 (file)
@@ -62,27 +62,39 @@ class PersonDetailView(SlugMixin, DetailView):
     context_object_name = 'person'
 
 
-class DynamicPersonListView(Select2QuerySetSequenceView):
+class PersonListBlockAutocompleteView(autocomplete.Select2QuerySetView):
 
     def get_queryset(self):
-        persons = Person.objects.all()
-        if self.q:
-            persons = persons.filter(person_title__icontains=self.q)
-        qs = autocomplete.QuerySetSequence(persons)
+        # if not self.request.is_authenticated():
+        #     return PersonListBlock.objects.none()
+
+        qs = PersonListBlock.objects.all()
+
+        title = self.forwarded.get('title', None)
+
+        if title:
+            qs = qs.filter(title=title)
+
         if self.q:
-            qs = qs.filter(person_title__icontains=self.q)
-        qs = self.mixup_querysets(qs)
+            qs = qs.filter(title__istartswith=self.q)
+
         return qs
 
 
-class DynamicContentPersonListBlockView(Select2QuerySetSequenceView):
+class PersonListView(autocomplete.Select2QuerySetView):
 
     def get_queryset(self):
-        person_list_blocks = PersonListBlock.objects.all()
-        if self.q:
-            person_list_blocks = person_list_blocks.filter(title__icontains=self.q)
-        qs = autocomplete.QuerySetSequence(person_list_blocks)
+        # if not self.request.is_authenticated():
+        #     return PersonListBlock.objects.none()
+
+        qs = Person.objects.all()
+
+        person_title = self.forwarded.get('person_title', None)
+
+        if person_title:
+            qs = qs.filter(person_title=person_title)
+
         if self.q:
-            qs = qs.filter(title__icontains=self.q)
-        qs = self.mixup_querysets(qs)
+            qs = qs.filter(person_title__istartswith=self.q)
+
         return qs
index 5b9cb16828aa246a448e57e98728d145b5ae4a44..2665082722aa01194eb75d66781d2b1df834691a 100644 (file)
@@ -39,20 +39,20 @@ class PageLinkInline(StackedDynamicInlineAdmin):
     model = PageLink
 
 
-class DynamicContentPersonListBlockInline(TabularDynamicInlineAdmin):
+class PersonListBlockAutocompleteInline(TabularDynamicInlineAdmin):
 
-    model = DynamicPersonListBlockPage
-    form = DynamicContentPersonListBlockForm
-
-    class Media:
-        js = (
-            static("mezzanine/js/admin/dynamic_inline.js"),
-        )
+    model = PersonListBlock
+    form = PagePersonListForm
 
 
 class CustomPageAdmin(PageAdmin):
 
-    inlines = [PageBlockInline, PageImageInline, PageAudioInline, PageVideoInline, PageLinkInline, DynamicContentPersonListBlockInline]
+    inlines = [PageBlockInline, PageImageInline,
+            PageAudioInline,
+            PageVideoInline,
+            PageLinkInline,
+            PersonListBlockAutocompleteInline,
+            ]
 
 
 class DynamicContentHomeSliderInline(TabularDynamicInlineAdmin):
@@ -77,11 +77,5 @@ class HomeAdminDisplayable(BaseTranslationModelAdmin):
     inlines = [DynamicContentHomeSliderInline, DynamicContentHomeBodyInline  ]
 
 
-
-
-
-
-
 admin.site.register(CustomPage, CustomPageAdmin)
 admin.site.register(Home, HomeAdminDisplayable)
-# admin.site.register(PersonListBlock, PersonListBlockAdmin)