From 9f9c1064bd2d20054577c7323ce38f2de86eefb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=93=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BA=D0=B8=D1=85?= Date: Fri, 4 Oct 2019 15:39:14 +0300 Subject: [PATCH 1/2] Fix rating --- .../migrations/0002_auto_20191004_0928.py | 22 +++++++++++++++++++ apps/rating/models.py | 3 +++ apps/rating/tasks.py | 17 ++++++-------- 3 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 apps/rating/migrations/0002_auto_20191004_0928.py diff --git a/apps/rating/migrations/0002_auto_20191004_0928.py b/apps/rating/migrations/0002_auto_20191004_0928.py new file mode 100644 index 00000000..a172c6f1 --- /dev/null +++ b/apps/rating/migrations/0002_auto_20191004_0928.py @@ -0,0 +1,22 @@ +# Generated by Django 2.2.4 on 2019-10-04 09:28 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('rating', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='rating', + options={}, + ), + migrations.AlterUniqueTogether( + name='rating', + unique_together={('ip', 'object_id', 'content_type')}, + ), + ] diff --git a/apps/rating/models.py b/apps/rating/models.py index 61e4378d..e1dcec86 100644 --- a/apps/rating/models.py +++ b/apps/rating/models.py @@ -10,6 +10,9 @@ class Rating(models.Model): content_object = GenericForeignKey('content_type', 'object_id') ip = models.GenericIPAddressField(verbose_name=_('ip')) + class Meta: + unique_together = ('ip', 'object_id', 'content_type') + @property def name(self): # Check if Generic obj has name or title diff --git a/apps/rating/tasks.py b/apps/rating/tasks.py index 0e176910..0b6878c4 100644 --- a/apps/rating/tasks.py +++ b/apps/rating/tasks.py @@ -1,22 +1,19 @@ -from datetime import timedelta -from celery import task +from celery import shared_task from rating.models import Rating from django.contrib.contenttypes.models import ContentType def add_rating(remote_addr, pk, model, app_label): add.apply_async( - (remote_addr, pk, model, app_label), countdown=60 * 60 + (remote_addr, pk, model, app_label), countdown=2 # 60 * 60 ) + # TODO Вернуть интервал -@task +@shared_task def add(remote_addr, pk, model, app_label): - rating = Rating() - rating.ip = remote_addr - rating.object_id = pk - rating.content_type = ContentType.objects.get(app_label=app_label, model=model) - rating.save() - + content_type = ContentType.objects.get(app_label=app_label, model=model) + Rating.objects.get_or_create( + ip=remote_addr, object_id=pk, content_type=content_type) From f93d0095f4708123fdd853cdebf9f0341b83317c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=93=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BA=D0=B8=D1=85?= Date: Fri, 4 Oct 2019 15:40:18 +0300 Subject: [PATCH 2/2] Fix rating --- apps/rating/tasks.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/rating/tasks.py b/apps/rating/tasks.py index 0b6878c4..5c2653a0 100644 --- a/apps/rating/tasks.py +++ b/apps/rating/tasks.py @@ -5,9 +5,8 @@ from django.contrib.contenttypes.models import ContentType def add_rating(remote_addr, pk, model, app_label): add.apply_async( - (remote_addr, pk, model, app_label), countdown=2 # 60 * 60 + (remote_addr, pk, model, app_label), countdown=60 * 60 ) - # TODO Вернуть интервал @shared_task