added admin permission

This commit is contained in:
abutalib-kiwi
2023-07-17 18:58:09 +05:30
parent e90326fcb6
commit 751af642b8
10 changed files with 214 additions and 14 deletions

View File

@ -1,33 +1,55 @@
"""
web_admin serializers file
"""
# django imports
from rest_framework import serializers
from django.conf import settings
# local imports
from base.messages import ERROR_CODE
from web_admin.models import Article, ArticleCard, SurveyOption, ArticleSurvey
from web_admin.utils import pop_id
class ArticleCardSerializer(serializers.ModelSerializer):
"""
Article Card serializer
"""
id = serializers.IntegerField(required=False)
class Meta:
"""
meta class
"""
model = ArticleCard
fields = ('id', 'title', 'description')
class SurveyOptionSerializer(serializers.ModelSerializer):
"""
survey option serializer
"""
id = serializers.IntegerField(required=False)
class Meta:
"""
meta class
"""
model = SurveyOption
fields = ('id', 'option', 'is_answer')
class ArticleSurveySerializer(serializers.ModelSerializer):
"""
article survey serializer
"""
id = serializers.IntegerField(required=False)
survey_options = SurveyOptionSerializer(many=True)
class Meta:
"""
meta class
"""
model = ArticleSurvey
fields = ('id', 'question', 'points', 'survey_options')
@ -46,12 +68,27 @@ class ArticleSerializer(serializers.ModelSerializer):
model = Article
fields = ('id', 'title', 'description', 'article_cards', 'article_survey')
def validate(self, attrs):
"""
to validate request data
:param attrs:
:return: validated attrs
"""
article_cards = attrs.get('article_cards', None)
article_survey = attrs.get('article_survey', None)
if article_cards is None or len(article_cards) > int(settings.MAX_ARTICLE_CARD):
raise serializers.ValidationError({'details': ERROR_CODE['2039']})
if article_survey is None or len(article_survey) < int(settings.MIN_ARTICLE_SURVEY) or int(
settings.MAX_ARTICLE_SURVEY) < len(article_survey):
raise serializers.ValidationError({'details': ERROR_CODE['2040']})
return attrs
def create(self, validated_data):
"""
to create article.
ID in post data dict is for update api.
:param validated_data:
:return: success message
:return: article object
"""
article_cards = validated_data.pop('article_cards')
article_survey = validated_data.pop('article_survey')
@ -73,6 +110,12 @@ class ArticleSerializer(serializers.ModelSerializer):
return article
def update(self, instance, validated_data):
"""
to update article and related table
:param instance:
:param validated_data:
:return: article object
"""
article_cards = validated_data.pop('article_cards')
article_survey = validated_data.pop('article_survey')
instance.title = validated_data.get('title', instance.title)