From c1738478abb3471511d15f2952ea4f6570b8d0b3 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Sun, 1 Sep 2019 13:24:37 +0300 Subject: [PATCH] added new model Review --- apps/establishment/admin.py | 11 +++++-- apps/establishment/models.py | 4 ++- apps/establishment/serializers.py | 15 +++++++++ apps/review/admin.py | 10 ++---- apps/review/migrations/0001_initial.py | 43 ++++++++++++++++++++++++++ 5 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 apps/review/migrations/0001_initial.py diff --git a/apps/establishment/admin.py b/apps/establishment/admin.py index d40950b1..d34141db 100644 --- a/apps/establishment/admin.py +++ b/apps/establishment/admin.py @@ -1,8 +1,10 @@ """Establishment admin conf.""" from django.contrib import admin -from establishment import models from django.contrib.contenttypes.admin import GenericTabularInline + +from establishment import models from main.models import Award, MetaDataContent +from review import models as review_models @admin.register(models.EstablishmentType) @@ -25,10 +27,15 @@ class MetaDataContentInline(GenericTabularInline): extra = 0 +class ReviewInline(GenericTabularInline): + model = review_models.Review + extra = 0 + + @admin.register(models.Establishment) class EstablishmentAdmin(admin.ModelAdmin): """Establishment admin.""" - inlines = [AwardInline, MetaDataContentInline] + inlines = [AwardInline, MetaDataContentInline, ReviewInline] @admin.register(models.EstablishmentSchedule) diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 56cc531c..0a2a8831 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -1,11 +1,12 @@ """Establishment models.""" +from django.contrib.contenttypes import fields as generic from django.core.exceptions import ValidationError from django.db import models from django.utils.translation import gettext_lazy as _ + from location.models import Address from utils.models import (ProjectBaseMixin, ImageMixin, TJSONField, TraslatedFieldsMixin, BaseAttributes) -from django.contrib.contenttypes import fields as generic # todo: establishment type&subtypes check @@ -88,6 +89,7 @@ class Establishment(ProjectBaseMixin, ImageMixin, TraslatedFieldsMixin): verbose_name=_('Price level')) awards = generic.GenericRelation(to='main.Award') tags = generic.GenericRelation(to='main.MetaDataContent') + reviews = generic.GenericRelation(to='review.Review') class Meta: """Meta class.""" diff --git a/apps/establishment/serializers.py b/apps/establishment/serializers.py index 49788db3..fef87cb5 100644 --- a/apps/establishment/serializers.py +++ b/apps/establishment/serializers.py @@ -1,8 +1,10 @@ """Establishment serializers.""" from rest_framework import serializers + from establishment import models from location.serializers import AddressSerializer from main.serializers import MetaDataContentSerializer, AwardSerializer +from review import models as review_models from timetable.models import Timetable @@ -46,6 +48,16 @@ class EstablishmentScheduleSerializer(serializers.ModelSerializer): ) +class ReviewSerializer(serializers.ModelSerializer): + """Serializer for model Review.""" + class Meta: + """Meta class.""" + model = review_models.Review + fields = ( + 'text', + ) + + class EstablishmentSerializer(serializers.ModelSerializer): """Serializer for Establishment model.""" @@ -59,6 +71,8 @@ class EstablishmentSerializer(serializers.ModelSerializer): schedule = EstablishmentScheduleSerializer(source='schedule.schedule', many=True, allow_null=True) + reviews = ReviewSerializer(source='reviews.last', + allow_null=True) class Meta: """Meta class.""" @@ -79,4 +93,5 @@ class EstablishmentSerializer(serializers.ModelSerializer): 'tags', 'awards', 'schedule', + 'reviews', ) diff --git a/apps/review/admin.py b/apps/review/admin.py index f3aeca39..cbd0bf94 100644 --- a/apps/review/admin.py +++ b/apps/review/admin.py @@ -1,7 +1,3 @@ -from django.contrib import admin -from review import models - - -@admin.register(models.Review) -class ReviewAdminModel(admin.ModelAdmin): - """Admin model for model Review.""" +# @admin.register(models.Review) +# class ReviewAdminModel(admin.ModelAdmin): +# """Admin model for model Review.""" diff --git a/apps/review/migrations/0001_initial.py b/apps/review/migrations/0001_initial.py new file mode 100644 index 00000000..3deac75e --- /dev/null +++ b/apps/review/migrations/0001_initial.py @@ -0,0 +1,43 @@ +# Generated by Django 2.2.4 on 2019-09-01 09:32 + +import django.core.validators +import django.utils.timezone +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('translation', '0002_siteinterfacedictionary'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Review', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')), + ('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')), + ('object_id', models.PositiveIntegerField()), + ('text', models.TextField(verbose_name='Text')), + ('status', models.PositiveSmallIntegerField(choices=[(0, 'To investigate'), (1, 'To review'), (2, 'Ready')], default=0)), + ('published_at', models.DateTimeField(blank=True, default=None, help_text='Review published datetime', null=True, verbose_name='Publish datetime')), + ('vintage', models.IntegerField(validators=[django.core.validators.MinValueValidator(1900), django.core.validators.MaxValueValidator(2100)], verbose_name='Year of review')), + ('child', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='review.Review', verbose_name='Child review')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='review_records_created', to=settings.AUTH_USER_MODEL, verbose_name='created by')), + ('language', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to='translation.Language', verbose_name='Review language')), + ('modified_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='review_records_modified', to=settings.AUTH_USER_MODEL, verbose_name='modified by')), + ('reviewer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to=settings.AUTH_USER_MODEL, verbose_name='Reviewer')), + ], + options={ + 'verbose_name': 'Review', + 'verbose_name_plural': 'Reviews', + }, + ), + ]