from rest_framework import serializers from news.models import News from uuid import uuid4 import datetime from django.conf import settings class NewsSerializer(serializers.ModelSerializer): # image_url = serializers.CharField() # preview_image_url = serializers.CharField() attachment_file_name = serializers.CharField(allow_null=True) # body = serializers.CharField(allow_null=True, source="description") body = serializers.CharField(allow_null=True) title = serializers.CharField() template = serializers.CharField() state = serializers.CharField() created_at = serializers.DateTimeField(source="start", format='%m-%d-%Y %H:%M:%S') class Meta: model = News fields = ( "created_at", "state", "template", # "image_url", # "preview_image_url", "attachment_file_name", "title", "body", "slug", "news_type", "playlist" ) def validate(self, data): data["state"] = self.get_state(data) data["template"] = self.get_template(data) data["title"] = self.get_title(data) data["description"] = self.get_description(data) data["image_url"] = self.get_image_url(data) data["preview_image_url"] = self.get_preview_image_url(data) data.pop("attachment_file_name") data.pop("body") return data def create(self, validated_data): # validated_data['state'] = self.get_state(validated_data) return News.objects.create(**validated_data) def get_template(self, obj): if obj["template"] == "main": return News.MAIN elif obj["template"] == "main.pdf.erb": return News.MAIN_PDF_ERB else: return News.NEWSPAPER # if obj.template == "main": # return News.MAIN # elif obj.template == "main.pdf.erb": # return News.MAIN_PDF_ERB # else: # return News.NEWSPAPER def get_state(self, obj): if obj["state"] == "published": return News.PUBLISHED elif obj["state"] == "hidden": return News.HIDDEN elif obj["state"] == "published_exclusive": return News.PUBLISHED_EXCLUSIVE else: return News.WAITING # if obj.state == "published": # return News.PUBLISHED # elif obj.state == "hidden": # return News.HIDDEN # elif obj.state == "published_exclusive": # return News.PUBLISHED_EXCLUSIVE # else: # return News.WAITING # django.db.utils.IntegrityError: "start" NOT NULL # def get_start(self, obj): # # return obj.created_at # return datetime.datetime.now().isoformat() def get_title(self, obj): tit = obj.get("title") return {"en-GB": tit} # return f'{"en-GB": {obj.title}}' def get_description(self, obj): # return {"en-GB": {obj["body"]}} desc = obj.get("body") return {"en-GB": desc} # if not hasattr(obj, "body"): # return "" # else: # return obj.body def get_image_url(self, obj): if not obj.get("attachment_file_name"): return "" if len(obj.get("attachment_file_name"))>200: return obj.get("attachment_file_name")[:200] return obj.get("attachment_file_name") # if not hasattr(obj, "attachment_file_name") or obj.attachment_file_name is None: # return "" # return obj.attachment_file_name def get_preview_image_url(self, obj): if not obj.get("attachment_file_name"): return "" if len(obj.get("attachment_file_name"))>200: return obj.get("attachment_file_name")[:200] return obj.get("attachment_file_name") # if not hasattr(obj, "attachment_file_name") or obj.attachment_file_name is None: # return "" # return obj.attachment_file_name