diff --git a/apps/location/serializers/common.py b/apps/location/serializers/common.py index 6db4fa7b..fe27892c 100644 --- a/apps/location/serializers/common.py +++ b/apps/location/serializers/common.py @@ -68,7 +68,7 @@ class CitySerializer(serializers.ModelSerializer): queryset=models.Country.objects.all(), write_only=True ) - country = CountrySerializer() + country = CountrySerializer(read_only=True) class Meta: model = models.City diff --git a/apps/main/migrations/0034_sitefeature_nested.py b/apps/main/migrations/0034_sitefeature_nested.py new file mode 100644 index 00000000..d699f209 --- /dev/null +++ b/apps/main/migrations/0034_sitefeature_nested.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.4 on 2019-11-07 14:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0033_auto_20191106_0744'), + ] + + operations = [ + migrations.AddField( + model_name='sitefeature', + name='nested', + field=models.ManyToManyField(to='main.SiteFeature'), + ), + ] diff --git a/apps/main/models.py b/apps/main/models.py index f7ff2c56..310257f3 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -151,6 +151,7 @@ class SiteFeature(ProjectBaseMixin): feature = models.ForeignKey(Feature, on_delete=models.PROTECT) published = models.BooleanField(default=False, verbose_name=_('Published')) main = models.BooleanField(default=False, verbose_name=_('Main')) + nested = models.ManyToManyField('self', symmetrical=False) objects = SiteFeatureQuerySet.as_manager() diff --git a/apps/main/serializers.py b/apps/main/serializers.py index 6f80178d..71bbd589 100644 --- a/apps/main/serializers.py +++ b/apps/main/serializers.py @@ -4,7 +4,7 @@ from rest_framework import serializers from advertisement.serializers.web import AdvertisementSerializer from location.serializers import CountrySerializer from main import models -from utils.serializers import ProjectModelSerializer, TranslatedField +from utils.serializers import ProjectModelSerializer, TranslatedField, RecursiveFieldSerializer class FeatureSerializer(serializers.ModelSerializer): @@ -27,6 +27,7 @@ class SiteFeatureSerializer(serializers.ModelSerializer): priority = serializers.IntegerField(source='feature.priority') route = serializers.CharField(source='feature.route.page_name') source = serializers.IntegerField(source='feature.source') + nested = RecursiveFieldSerializer(many=True, allow_null=True) class Meta: """Meta class.""" @@ -36,8 +37,9 @@ class SiteFeatureSerializer(serializers.ModelSerializer): 'slug', 'priority', 'route', - 'source' - ) + 'source', + 'nested', + ) class CurrencySerializer(ProjectModelSerializer): diff --git a/apps/utils/serializers.py b/apps/utils/serializers.py index bd7e8b8e..9a7be59d 100644 --- a/apps/utils/serializers.py +++ b/apps/utils/serializers.py @@ -98,3 +98,9 @@ class FavoritesCreateSerializer(serializers.ModelSerializer): @property def slug(self): return self.request.parser_context.get('kwargs').get('slug') + + +class RecursiveFieldSerializer(serializers.Serializer): + def to_representation(self, value): + serializer = self.parent.parent.__class__(value, context=self.context) + return serializer.data