diff --git a/README.md b/README.md index 661751478e16d8953852ca723a1e78eef39b358d..dc508c8d230acb0dc018d97d7779c96a3a78d287 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # Django LDP example +# Dependencies +This component must be used with another one. By default solid polls is used with solid-circles. +To use it by default run pip3 install djangoldp_circles. +To change the component it is combined with edit lines xxx and xxx of the models.py file + + ## Step by step quickstart 1. Installation diff --git a/djangoldp_polls/__init__.py b/djangoldp_polls/__init__.py index 7a876269a902b69193d65dbf0054dacce255c89d..359e6f6f952c41d96ec8c4db5c3fa9275a637c9b 100644 --- a/djangoldp_polls/__init__.py +++ b/djangoldp_polls/__init__.py @@ -1,2 +1,2 @@ __version__ = '0.1.0' -name = "djangoldp_polls" +name = "djangoldp_polls" \ No newline at end of file diff --git a/djangoldp_polls/djangoldp-urls.py b/djangoldp_polls/djangoldp-urls.py deleted file mode 100644 index 7c8f8759069e8347f3061a0ad21148fd8aa31bcd..0000000000000000000000000000000000000000 --- a/djangoldp_polls/djangoldp-urls.py +++ /dev/null @@ -1,31 +0,0 @@ -"""server URL Configuration - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/1.11/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.conf.urls import url, include - 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) -""" -from django.conf.urls import url, include -from django.contrib import admin -from django.conf import settings -from django.conf.urls.static import static -from django.views import TotalVotes - -urlpatterns = [ - url(r'^', include('djangoldp.urls')), - url(r'^admin/', admin.site.urls), - url(r'^/polls/?P<pk>[0-9]+/total_votes/$', TotalVotes.as_view(), name='api-poll-votes'), - -] - -if settings.DEBUG: - urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) - diff --git a/djangoldp_polls/djangoldp_urls.py b/djangoldp_polls/djangoldp_urls.py new file mode 100644 index 0000000000000000000000000000000000000000..583fa58163ae4abbeb35051de04c6b62a6a9a012 --- /dev/null +++ b/djangoldp_polls/djangoldp_urls.py @@ -0,0 +1,32 @@ +"""server URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" + +"""djangoldp project URL Configuration""" +from django.conf.urls import url,include +from django.contrib import admin +from .views import TotalVotes +from djangoldp.models import Model +from djangoldp_polls.models import PollOption + +urlpatterns = [ + url(r'^polls/total_votes/(?P<pk>[0-9]+)/', TotalVotes.urls(model_prefix='total-votes', + model=PollOption, + permission_classes=Model.get_meta(PollOption, + 'permission_classes', + []), + fields=Model.get_meta(PollOption, 'serializer_fields',[]), + nested_fields=Model.get_meta(PollOption, 'nested_fields', []))), +] \ No newline at end of file diff --git a/djangoldp_polls/migrations/0001_initial.py b/djangoldp_polls/migrations/0001_initial.py index a19c6423333b2fc231b58cae339e99b3863c4338..95cbb6c0daf0cd2dd8d2565d310139a667fa2620 100644 --- a/djangoldp_polls/migrations/0001_initial.py +++ b/djangoldp_polls/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 10:11 +# Generated by Django 1.11.29 on 2020-08-06 02:37 from __future__ import unicode_literals from django.conf import settings @@ -14,41 +14,27 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('djangoldp_conversation', '0006_auto_20200617_1309'), ] operations = [ - migrations.CreateModel( - name='Debate', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('urlid', djangoldp.fields.LDPUrlField(blank=True, null=True, unique=True)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('comment', models.TextField(verbose_name='Long description')), - ('author', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='createdDebated', to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='Option', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('urlid', djangoldp.fields.LDPUrlField(blank=True, null=True, unique=True)), - ('name', models.CharField(max_length=250, verbose_name='Options available for a vote')), - ], - ), migrations.CreateModel( name='Poll', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('urlid', djangoldp.fields.LDPUrlField(blank=True, null=True, unique=True)), + ('is_backlink', models.BooleanField(default=False, help_text='(DEPRECIATED) set automatically to indicate the Model is a backlink')), + ('allow_create_backlink', models.BooleanField(default=True, help_text='set to False to disable backlink creation after Model save')), ('created_at', models.DateTimeField(auto_now_add=True)), ('title', models.CharField(max_length=250, verbose_name='Title')), ('image', models.URLField(blank=True, null=True, verbose_name="Illustration de l'évènement")), ('hostingOrganisation', models.CharField(max_length=250, verbose_name='Name of the hosting organisation')), + ('startDate', models.DateField(blank=True, null=True, verbose_name='Date de début')), ('endDate', models.DateField(verbose_name='Date de fin')), ('shortDescription', models.CharField(max_length=250, verbose_name='Short description')), ('longDescription', models.TextField(verbose_name='Long description')), - ('author', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='createdVotes', to=settings.AUTH_USER_MODEL)), - ('debate', models.ManyToManyField(blank=True, related_name='debate', to='djangoldp_polls.Debate')), + ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='createdVotes', to=settings.AUTH_USER_MODEL)), + ('debate', models.ManyToManyField(blank=True, related_name='debates', to='djangoldp_conversation.Conversation')), ], ), migrations.CreateModel( @@ -56,6 +42,8 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('urlid', djangoldp.fields.LDPUrlField(blank=True, null=True, unique=True)), + ('is_backlink', models.BooleanField(default=False, help_text='(DEPRECIATED) set automatically to indicate the Model is a backlink')), + ('allow_create_backlink', models.BooleanField(default=True, help_text='set to False to disable backlink creation after Model save')), ('name', models.CharField(max_length=250, verbose_name='Options available for a vote')), ], ), @@ -64,7 +52,9 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('urlid', djangoldp.fields.LDPUrlField(blank=True, null=True, unique=True)), - ('name', models.CharField(max_length=250, verbose_name='Tags related to the vote')), + ('is_backlink', models.BooleanField(default=False, help_text='(DEPRECIATED) set automatically to indicate the Model is a backlink')), + ('allow_create_backlink', models.BooleanField(default=True, help_text='set to False to disable backlink creation after Model save')), + ('name', models.CharField(max_length=250, verbose_name='Name')), ], ), migrations.CreateModel( @@ -72,15 +62,17 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('urlid', djangoldp.fields.LDPUrlField(blank=True, null=True, unique=True)), - ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='author', to=settings.AUTH_USER_MODEL)), - ('chosenOption', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='chosenOption', to='djangoldp_polls.PollOption')), - ('relatedPoll', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='relatedPoll', to='djangoldp_polls.Poll')), + ('is_backlink', models.BooleanField(default=False, help_text='(DEPRECIATED) set automatically to indicate the Model is a backlink')), + ('allow_create_backlink', models.BooleanField(default=True, help_text='set to False to disable backlink creation after Model save')), + ('chosenOption', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='userVote', to='djangoldp_polls.PollOption')), + ('relatedPoll', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='votes', to='djangoldp_polls.Poll')), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL)), ], ), migrations.AddField( model_name='poll', name='pollOptions', - field=models.ManyToManyField(blank=True, related_name='pollOptions', to='djangoldp_polls.PollOption'), + field=models.ManyToManyField(blank=True, related_name='relatedPollOptions', to='djangoldp_polls.PollOption'), ), migrations.AddField( model_name='poll', diff --git a/djangoldp_polls/migrations/0002_auto_20200423_1035.py b/djangoldp_polls/migrations/0002_poll_circle.py similarity index 50% rename from djangoldp_polls/migrations/0002_auto_20200423_1035.py rename to djangoldp_polls/migrations/0002_poll_circle.py index 17c39864dc453e81faef78257d563beae6564c5b..55bd116af07f4cd46652c1c1115b65ac14f893cf 100644 --- a/djangoldp_polls/migrations/0002_auto_20200423_1035.py +++ b/djangoldp_polls/migrations/0002_poll_circle.py @@ -1,24 +1,22 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 10:35 +# Generated by Django 1.11.29 on 2020-08-07 14:13 from __future__ import unicode_literals from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ + ('djangoldp_circle', '0009_auto_20200807_1413'), ('djangoldp_polls', '0001_initial'), ] operations = [ - migrations.RemoveField( - model_name='vote', - name='relatedPoll', - ), migrations.AddField( model_name='poll', - name='relatedVotes', - field=models.ManyToManyField(blank=True, related_name='relatedVotes', to='djangoldp_polls.Vote'), + name='circle', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='resources', to='djangoldp_circle.Circle'), ), ] diff --git a/djangoldp_polls/migrations/0003_auto_20200423_1045.py b/djangoldp_polls/migrations/0003_auto_20200423_1045.py deleted file mode 100644 index d2ee676f5864fa21360029e8eff1d0b6755b1d36..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0003_auto_20200423_1045.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 10:45 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0002_auto_20200423_1035'), - ] - - operations = [ - migrations.RemoveField( - model_name='poll', - name='relatedVotes', - ), - migrations.AddField( - model_name='vote', - name='relatedPoll', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='relatedPoll', to='djangoldp_polls.Poll'), - preserve_default=False, - ), - ] diff --git a/djangoldp_polls/migrations/0004_auto_20200423_1055.py b/djangoldp_polls/migrations/0004_auto_20200423_1055.py deleted file mode 100644 index 2eadb899b4ba199505984a07667271a68c1ae9a9..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0004_auto_20200423_1055.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 10:55 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0003_auto_20200423_1045'), - ] - - operations = [ - migrations.AlterField( - model_name='poll', - name='author', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='createdVotes', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/djangoldp_polls/migrations/0005_auto_20200423_1131.py b/djangoldp_polls/migrations/0005_auto_20200423_1131.py deleted file mode 100644 index c34c507a108f4579e0790a029acfef477e7e22bd..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0005_auto_20200423_1131.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 11:31 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0004_auto_20200423_1055'), - ] - - operations = [ - migrations.AlterField( - model_name='vote', - name='relatedPoll', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='related_poll', to='djangoldp_polls.Poll'), - ), - ] diff --git a/djangoldp_polls/migrations/0006_auto_20200423_1152.py b/djangoldp_polls/migrations/0006_auto_20200423_1152.py deleted file mode 100644 index a5b3223061c67abc268f43b5883c86746a0afc44..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0006_auto_20200423_1152.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 11:52 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0005_auto_20200423_1131'), - ] - - operations = [ - migrations.AlterField( - model_name='vote', - name='author', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='author', to=settings.AUTH_USER_MODEL), - preserve_default=False, - ), - ] diff --git a/djangoldp_polls/migrations/0007_auto_20200423_1157.py b/djangoldp_polls/migrations/0007_auto_20200423_1157.py deleted file mode 100644 index a66f580c28d3f0baeff71b8aefef021a7603bf96..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0007_auto_20200423_1157.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 11:57 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0006_auto_20200423_1152'), - ] - - operations = [ - migrations.AlterField( - model_name='vote', - name='relatedPoll', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='relatedPoll', to='djangoldp_polls.Poll'), - ), - ] diff --git a/djangoldp_polls/migrations/0008_auto_20200423_1206.py b/djangoldp_polls/migrations/0008_auto_20200423_1206.py deleted file mode 100644 index e7e41e5b1720be1d93ee5762f32556b399edefa8..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0008_auto_20200423_1206.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 12:06 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0007_auto_20200423_1157'), - ] - - operations = [ - migrations.AlterField( - model_name='vote', - name='author', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='author', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/djangoldp_polls/migrations/0009_auto_20200423_1208.py b/djangoldp_polls/migrations/0009_auto_20200423_1208.py deleted file mode 100644 index 7127a009517762be15f5a4746423bc52f9cbeb30..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0009_auto_20200423_1208.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 12:08 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0008_auto_20200423_1206'), - ] - - operations = [ - migrations.AlterField( - model_name='vote', - name='author', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='author', to=settings.AUTH_USER_MODEL, unique=True), - ), - ] diff --git a/djangoldp_polls/migrations/0010_auto_20200423_1210.py b/djangoldp_polls/migrations/0010_auto_20200423_1210.py deleted file mode 100644 index 01d61914888f717fe2cef9e906d0fc2236ab1cfd..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0010_auto_20200423_1210.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 12:10 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0009_auto_20200423_1208'), - ] - - operations = [ - migrations.AlterField( - model_name='vote', - name='author', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='author', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/djangoldp_polls/migrations/0011_auto_20200423_1213.py b/djangoldp_polls/migrations/0011_auto_20200423_1213.py deleted file mode 100644 index 0b04f7d4cc9fa234187b91a932eefb14b2aec946..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0011_auto_20200423_1213.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 12:13 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('djangoldp_polls', '0010_auto_20200423_1210'), - ] - - operations = [ - migrations.RemoveField( - model_name='vote', - name='author', - ), - migrations.AddField( - model_name='vote', - name='user', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='author', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/djangoldp_polls/migrations/0012_auto_20200423_1214.py b/djangoldp_polls/migrations/0012_auto_20200423_1214.py deleted file mode 100644 index a37590fcfaea558a0fb3ab26335e297a23897a51..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0012_auto_20200423_1214.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 12:14 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0011_auto_20200423_1213'), - ] - - operations = [ - migrations.AlterField( - model_name='vote', - name='user', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL), - preserve_default=False, - ), - ] diff --git a/djangoldp_polls/migrations/0013_auto_20200423_1216.py b/djangoldp_polls/migrations/0013_auto_20200423_1216.py deleted file mode 100644 index 06862c233b3508193a879d2ff042bd66a2a500c8..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0013_auto_20200423_1216.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 12:16 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0012_auto_20200423_1214'), - ] - - operations = [ - migrations.AlterField( - model_name='vote', - name='user', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/djangoldp_polls/migrations/0014_auto_20200423_1217.py b/djangoldp_polls/migrations/0014_auto_20200423_1217.py deleted file mode 100644 index 633ef108530e32a8c3f5920e577ab3a8d7497ecc..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0014_auto_20200423_1217.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 12:17 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('djangoldp_polls', '0013_auto_20200423_1216'), - ] - - operations = [ - migrations.RemoveField( - model_name='vote', - name='user', - ), - migrations.AddField( - model_name='vote', - name='author', - field=models.OneToOneField(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='author', to=settings.AUTH_USER_MODEL), - preserve_default=False, - ), - ] diff --git a/djangoldp_polls/migrations/0015_auto_20200423_1219.py b/djangoldp_polls/migrations/0015_auto_20200423_1219.py deleted file mode 100644 index 2e247f425087ba90654cc3503d04ccd66549900a..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0015_auto_20200423_1219.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 12:19 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('djangoldp_polls', '0014_auto_20200423_1217'), - ] - - operations = [ - migrations.RemoveField( - model_name='vote', - name='author', - ), - migrations.AddField( - model_name='vote', - name='user', - field=models.OneToOneField(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL), - preserve_default=False, - ), - ] diff --git a/djangoldp_polls/migrations/0016_auto_20200423_1220.py b/djangoldp_polls/migrations/0016_auto_20200423_1220.py deleted file mode 100644 index a5c99631f87b6474cfa09162db7b839c35bd5428..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0016_auto_20200423_1220.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 12:20 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0015_auto_20200423_1219'), - ] - - operations = [ - migrations.AlterField( - model_name='vote', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/djangoldp_polls/migrations/0017_auto_20200423_1221.py b/djangoldp_polls/migrations/0017_auto_20200423_1221.py deleted file mode 100644 index e044ace47beaca576c17220275c9ef87b7036d6b..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0017_auto_20200423_1221.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 12:21 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0016_auto_20200423_1220'), - ] - - operations = [ - migrations.AlterField( - model_name='vote', - name='user', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/djangoldp_polls/migrations/0018_auto_20200423_1224.py b/djangoldp_polls/migrations/0018_auto_20200423_1224.py deleted file mode 100644 index 730d73daf4a7d922769002800c48f3d5f067aa11..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0018_auto_20200423_1224.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 12:24 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0017_auto_20200423_1221'), - ] - - operations = [ - migrations.AlterField( - model_name='vote', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/djangoldp_polls/migrations/0019_auto_20200423_1928.py b/djangoldp_polls/migrations/0019_auto_20200423_1928.py deleted file mode 100644 index 51dcc57ecf3cdcf55a475b8eb517cf9ee59d55ab..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0019_auto_20200423_1928.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 19:28 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0018_auto_20200423_1224'), - ] - - operations = [ - migrations.AlterField( - model_name='debate', - name='author', - field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='createdComment', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/djangoldp_polls/migrations/0020_auto_20200423_1929.py b/djangoldp_polls/migrations/0020_auto_20200423_1929.py deleted file mode 100644 index 5c668ba8818921dab4084e59ca8a129065d87fe2..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0020_auto_20200423_1929.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 19:29 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('djangoldp_polls', '0019_auto_20200423_1928'), - ] - - operations = [ - migrations.RemoveField( - model_name='debate', - name='author', - ), - migrations.AddField( - model_name='debate', - name='commentAuthor', - field=models.ForeignKey(blank=True, default=1, on_delete=django.db.models.deletion.CASCADE, related_name='commentAuthor', to=settings.AUTH_USER_MODEL), - preserve_default=False, - ), - ] diff --git a/djangoldp_polls/migrations/0021_auto_20200423_1934.py b/djangoldp_polls/migrations/0021_auto_20200423_1934.py deleted file mode 100644 index 6e3da22d5a20c4316f9d43b0896fb5611390a60f..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0021_auto_20200423_1934.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 19:34 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('djangoldp_polls', '0020_auto_20200423_1929'), - ] - - operations = [ - migrations.RemoveField( - model_name='debate', - name='commentAuthor', - ), - migrations.AddField( - model_name='debate', - name='debateUser', - field=models.ForeignKey(blank=True, default=1, on_delete=django.db.models.deletion.CASCADE, related_name='debateUser', to=settings.AUTH_USER_MODEL), - preserve_default=False, - ), - ] diff --git a/djangoldp_polls/migrations/0022_auto_20200423_1940.py b/djangoldp_polls/migrations/0022_auto_20200423_1940.py deleted file mode 100644 index 75f2343cf125d41958172f73bb864c59aca53905..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0022_auto_20200423_1940.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 19:40 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0021_auto_20200423_1934'), - ] - - operations = [ - migrations.AlterField( - model_name='debate', - name='debateUser', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='debate_user', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/djangoldp_polls/migrations/0023_auto_20200423_1942.py b/djangoldp_polls/migrations/0023_auto_20200423_1942.py deleted file mode 100644 index 47acc3e7f0cf9063b9bbfda5969228f127b43ca7..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0023_auto_20200423_1942.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 19:42 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('djangoldp_polls', '0022_auto_20200423_1940'), - ] - - operations = [ - migrations.AlterField( - model_name='debate', - name='debateUser', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='debate_user', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/djangoldp_polls/migrations/0024_auto_20200423_1959.py b/djangoldp_polls/migrations/0024_auto_20200423_1959.py deleted file mode 100644 index 8e13e3f00b478ab856daf55b532d11f6ad20de1d..0000000000000000000000000000000000000000 --- a/djangoldp_polls/migrations/0024_auto_20200423_1959.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.26 on 2020-04-23 19:59 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('djangoldp_polls', '0023_auto_20200423_1942'), - ] - - operations = [ - migrations.DeleteModel( - name='Option', - ), - migrations.RemoveField( - model_name='debate', - name='debateUser', - ), - migrations.AddField( - model_name='debate', - name='author', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='debate_author', to=settings.AUTH_USER_MODEL), - preserve_default=False, - ), - ] diff --git a/djangoldp_polls/models.py b/djangoldp_polls/models.py index 42f5fb7ecf407915b2cacce38e4ccef86ac7e440..96f5518ae84a6ccf80c1ca4f2ac0822b6997cff0 100644 --- a/djangoldp_polls/models.py +++ b/djangoldp_polls/models.py @@ -5,6 +5,8 @@ from djangoldp.models import Model from django.contrib.auth import get_user_model from django.db.models import Sum +from djangoldp_conversation.models import Conversation +from djangoldp_circle.models import Circle User = get_user_model() User.name=User.get_full_name @@ -16,82 +18,65 @@ User.name=User.get_full_name #======================== class Tag (Model): - name = models.CharField(max_length=250,verbose_name="Tags related to the vote") + name = models.CharField(max_length=250,verbose_name="Name") - class Meta : - serializer_fields = ['@id','name'] - anonymous_perms = ['view'] - authenticated_perms = ['inherit','add'] + class Meta : + serializer_fields = ['@id','name'] + anonymous_perms = ['view'] + authenticated_perms = ['inherit','add'] - def __str__(self): - return self.name + def __str__(self): + return self.name class PollOption (Model): - name = models.CharField(max_length=250,verbose_name="Options available for a vote") + name = models.CharField(max_length=250,verbose_name="Options available for a vote") - class Meta : - serializer_fields = ['@id','name'] - nested_fields = [] - anonymous_perms = ['view','add'] - authenticated_perms = ['inherit','add'] + class Meta : + serializer_fields = ['@id','name'] + nested_fields = ['userVote','relatedPollOptions'] + anonymous_perms = ['view','add'] + authenticated_perms = ['inherit','add'] - def __str__(self): - return self.name - - -class Debate (Model): - created_at = models.DateTimeField(auto_now_add=True) - author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='debate_author') - comment = models.TextField(verbose_name="Long description") - #likes = key to likes model - - class Meta : - auto_author = "author" - serializer_fields = ['@id','comment','author'] - nested_fields = [] - anonymous_perms = ['view','add'] - authenticated_perms = ['inherit','add'] - - - def __str__(self): - return self.comment - + def __str__(self): + return self.name class Poll (Model): - created_at = models.DateTimeField(auto_now_add=True) - author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='createdVotes', null=True,blank=True) - title = models.CharField(max_length=250,verbose_name="Title") - image = models.URLField(blank=True, null=True, verbose_name="Illustration de l'évènement") - hostingOrganisation = models.CharField(max_length=250,verbose_name="Name of the hosting organisation") - endDate = models.DateField(verbose_name="Date de fin" ) - shortDescription = models.CharField(max_length=250,verbose_name="Short description") - longDescription = models.TextField(verbose_name="Long description") - tags = models.ManyToManyField(Tag, related_name='tags', blank=True) - pollOptions = models.ManyToManyField(PollOption, related_name='pollOptions', blank=True) - debate = models.ManyToManyField(Debate, related_name='debate', blank=True) - #relatedVotes = models.ManyToManyField(Vote, related_name='relatedVotes', blank=True) - - class Meta : - serializer_fields = ['@id','created_at','votes','debate','author','title','image','hostingOrganisation','endDate','shortDescription','longDescription','tags'] - nested_fields = ['tags','debate','votes'] - anonymous_perms = ['view','add','change'] - authenticated_perms = ['inherit','add'] - - def __str__(self): - return self.title + created_at = models.DateTimeField(auto_now_add=True) + author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='createdVotes', null=True,blank=True) + title = models.CharField(max_length=250,verbose_name="Title") + image = models.URLField(blank=True, null=True, verbose_name="Illustration de l'évènement") + hostingOrganisation = models.CharField(max_length=250,verbose_name="Name of the hosting organisation") + startDate = models.DateField(verbose_name="Date de début", blank=True, null=True ) + endDate = models.DateField(verbose_name="Date de fin" ) + shortDescription = models.CharField(max_length=250,verbose_name="Short description") + longDescription = models.TextField(verbose_name="Long description") + tags = models.ManyToManyField(Tag, related_name='tags', blank=True) + pollOptions = models.ManyToManyField(PollOption, related_name='relatedPollOptions', blank=True) + debate = models.ManyToManyField(Conversation, related_name='debates', blank=True) + circle = models.ForeignKey(Circle, null=True, related_name="resources") + + class Meta : + serializer_fields = ['@id','created_at','debate','pollOptions','votes','author','title','image','hostingOrganisation','startDate','endDate','shortDescription','longDescription','tags'] + nested_fields = ['tags','votes','pollOptions','debate'] + anonymous_perms = ['view','add','change'] + authenticated_perms = ['inherit','add'] + + def __str__(self): + return self.title class Vote (Model): - user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='user') - chosenOption = models.ForeignKey(PollOption, related_name='userVote') - relatedPoll = models.ForeignKey(Poll, related_name='votes') - - class Meta : - auto_author = "user" - serializer_fields = ['@id','chosenOption','relatedPoll'] - nested_fields = [] - anonymous_perms = ['view','add','change'] - authenticated_perms = ['inherit','add'] \ No newline at end of file + user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='user',null=True,blank=True) + chosenOption = models.ForeignKey(PollOption, related_name='userVote') + relatedPoll = models.ForeignKey(Poll, related_name='votes') + + class Meta : + auto_author = "user" + serializer_fields = ['@id','chosenOption','relatedPoll'] + nested_fields = [] + anonymous_perms = ['view','add','change'] + authenticated_perms = ['inherit','add'] + \ No newline at end of file diff --git a/djangoldp_polls/serializers.py b/djangoldp_polls/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..7bf3e4520d7eaace879efd64f1675603237e3adf --- /dev/null +++ b/djangoldp_polls/serializers.py @@ -0,0 +1,15 @@ +from rest_framework import serializers +from djangoldp.serializers import LDPSerializer +from djangoldp_polls.models import PollOption + + +class PollOptionSerializer(LDPSerializer): + total_votes = serializers.SerializerMethodField() + + class Meta: + model = PollOption + fields = ['urlid','name', 'total_votes'] + + def get_total_votes(self, obj): + votes_queryset = self.context.get("votes_queryset") + return votes_queryset.filter(chosenOption=obj).count() diff --git a/djangoldp_polls/views.py b/djangoldp_polls/views.py index b673be86c39d68161291f28e2864cc030d7f87ba..d6cbe8a4c74eabdcd80a700a55fb41729eabe35c 100644 --- a/djangoldp_polls/views.py +++ b/djangoldp_polls/views.py @@ -1,20 +1,46 @@ +from django.http import Http404 + from djangoldp.views import LDPViewSet from datetime import datetime -from .models import Poll +from rest_framework import status +from rest_framework.views import APIView +from rest_framework.response import Response + +from .models import Poll,Vote +from .serializers import PollOptionSerializer + class FuturePollViewset(LDPViewSet): model = Poll + def get_queryset(self): return super().get_queryset().filter(enddate__gte=datetime.now()) -class TotalVotes(APIView) : - poll = Poll.objects.get(pk=pk) - # gets all votes for this poll - votes = poll.votes.all() - choices = [] - for choice in poll.userVote.all(): - total_votes = votes.filter(chosenOption=choice).count() - choices.append((choice.name, total_votes)) +class TotalVotes(LDPViewSet): + '''view to GET the total counts of votes selecting a particular option''' + + def _get_poll_or_404(self): + pk = self.kwargs['pk'] + + try: + return Poll.objects.get(pk=pk) + except Poll.DoesNotExist: + raise Http404('could not get a Poll with this ID!') + + def get_serializer_context(self): + poll = self._get_poll_or_404() + + votes = poll.votes.all() + context = super().get_serializer_context() + context.update({'votes_queryset': votes}) + return context + + def get_queryset(self, *args, **kwargs): + poll = self._get_poll_or_404() + return poll.pollOptions.all() - # return response with choices in content + def get_serializer_class(self): + # NOTE: this is required because currently DjangoLDP overrides the serializer_class during __init__ + # https://git.startinblox.com/djangoldp-packages/djangoldp/issues/241 + return PollOptionSerializer