From 0d4f08085015cef48f19499ee88e9808f5244f55 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Sun, 1 Sep 2019 12:30:00 +0300 Subject: [PATCH] added new model - Comment --- apps/account/admin.py | 4 +- apps/establishment/admin.py | 8 +++- apps/establishment/migrations/0006_comment.py | 32 ++++++++++++++++ apps/establishment/models.py | 38 ++++++++++++++++++- apps/establishment/serializers.py | 20 ++++++++++ 5 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 apps/establishment/migrations/0006_comment.py diff --git a/apps/account/admin.py b/apps/account/admin.py index 9cbe52eb..e9c853bb 100644 --- a/apps/account/admin.py +++ b/apps/account/admin.py @@ -18,7 +18,7 @@ class UserAdmin(BaseUserAdmin): fieldsets = ( (None, {'fields': ('email', 'password',)}), (_('Personal info'), { - 'fields': ('username', 'first_name', 'last_name', )}), + 'fields': ('username', 'first_name', 'last_name', 'image')}), (_('Subscription'), { 'fields': ( 'newsletter', @@ -27,7 +27,7 @@ class UserAdmin(BaseUserAdmin): (_('Important dates'), {'fields': ('last_login', 'date_joined')}), (_('Permissions'), { 'fields': ( - 'is_active', 'is_staff', 'is_superuser', 'email_confirmed' + 'is_active', 'is_staff', 'is_superuser', 'email_confirmed', 'groups', 'user_permissions'), 'classes': ('collapse', ) }), diff --git a/apps/establishment/admin.py b/apps/establishment/admin.py index d40950b1..638f6564 100644 --- a/apps/establishment/admin.py +++ b/apps/establishment/admin.py @@ -1,7 +1,8 @@ """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 @@ -34,3 +35,8 @@ class EstablishmentAdmin(admin.ModelAdmin): @admin.register(models.EstablishmentSchedule) class EstablishmentSchedule(admin.ModelAdmin): """Establishment schedule""" + + +@admin.register(models.Comment) +class EstablishmentComment(admin.ModelAdmin): + """Establishment comments.""" diff --git a/apps/establishment/migrations/0006_comment.py b/apps/establishment/migrations/0006_comment.py new file mode 100644 index 00000000..4ae22034 --- /dev/null +++ b/apps/establishment/migrations/0006_comment.py @@ -0,0 +1,32 @@ +# Generated by Django 2.2.4 on 2019-09-01 09:16 + +import django.utils.timezone +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('establishment', '0005_establishmentschedule'), + ] + + operations = [ + migrations.CreateModel( + name='Comment', + 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')), + ('text', models.TextField(verbose_name='Comment text')), + ('mark', models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='Mark')), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to=settings.AUTH_USER_MODEL, verbose_name='Author')), + ('establishment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='establishment.Establishment', verbose_name='Establishment')), + ], + options={ + 'verbose_name': 'Comment', + 'verbose_name_plural': 'Comments', + }, + ), + ] diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 56cc531c..668d0d46 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 @@ -146,3 +147,38 @@ class EstablishmentSchedule(BaseAttributes): """Meta class""" verbose_name = _('Establishment schedule') verbose_name_plural = _('Establishment schedules') + + +class CommentQuerySet(models.QuerySet): + """QuerySets for Comment model.""" + + def by_author(self, author): + """Return comments by author""" + return self.filter(author=author) + + +class Comment(ProjectBaseMixin): + """Comment model.""" + text = models.TextField(verbose_name=_('Comment text')) + mark = models.PositiveIntegerField(blank=True, null=True, + default=None, + verbose_name=_('Mark')) + author = models.ForeignKey('account.User', + related_name='comments', + on_delete=models.CASCADE, + verbose_name=_('Author')) + establishment = models.ForeignKey(Establishment, + related_name='comments', + on_delete=models.CASCADE, + verbose_name=_('Establishment')) + + objects = CommentQuerySet.as_manager() + + class Meta: + """Meta class""" + verbose_name = _('Comment') + verbose_name_plural = _('Comments') + + def __str__(self): + """String representation""" + return str(self.author) diff --git a/apps/establishment/serializers.py b/apps/establishment/serializers.py index 49788db3..660f9709 100644 --- a/apps/establishment/serializers.py +++ b/apps/establishment/serializers.py @@ -1,5 +1,6 @@ """Establishment serializers.""" from rest_framework import serializers + from establishment import models from location.serializers import AddressSerializer from main.serializers import MetaDataContentSerializer, AwardSerializer @@ -46,6 +47,22 @@ class EstablishmentScheduleSerializer(serializers.ModelSerializer): ) +class CommentSerializer(serializers.ModelSerializer): + """Comment serializer""" + nickname = serializers.CharField(source='author.username') + image = serializers.ImageField(source='author.image') + + class Meta: + """Serializer for model Comment""" + model = models.Comment + fields = ( + 'text', + 'mark', + 'nickname', + 'image' + ) + + class EstablishmentSerializer(serializers.ModelSerializer): """Serializer for Establishment model.""" @@ -59,6 +76,8 @@ class EstablishmentSerializer(serializers.ModelSerializer): schedule = EstablishmentScheduleSerializer(source='schedule.schedule', many=True, allow_null=True) + comments = CommentSerializer(many=True, + allow_null=True) class Meta: """Meta class.""" @@ -79,4 +98,5 @@ class EstablishmentSerializer(serializers.ModelSerializer): 'tags', 'awards', 'schedule', + 'comments', )