Add comment serializer

This commit is contained in:
littlewolf 2019-10-29 16:02:29 +03:00
parent 5984fdc7cd
commit 9310bff319
4 changed files with 106 additions and 0 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.4 on 2019-10-29 12:58
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('comment', '0003_auto_20191015_0704'),
]
operations = [
migrations.AddField(
model_name='comment',
name='old_id',
field=models.IntegerField(blank=True, default=None, null=True),
),
]

View File

@ -45,6 +45,8 @@ class Comment(ProjectBaseMixin):
objects = CommentQuerySet.as_manager()
country = models.ForeignKey(Country, verbose_name=_('Country'),
on_delete=models.SET_NULL, null=True)
old_id = models.IntegerField(null=True, blank=True, default=None)
class Meta:
"""Meta class"""

View File

@ -0,0 +1,22 @@
from django.db.models import F
from pprint import pprint
from transfer.models import Comments, Accounts, Establishments
from transfer.serializers.comments import CommentSerializer
def transfer_comments():
queryset = Comments.objects.filter(account__isnull=False, mark__isnull=False)\
.only("id", "comment", "mark", "locale", "establishment_id", "account_id")
serialized_data = CommentSerializer(data=list(queryset.values()), many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
pprint(serialized_data.errors)
data_types = {
"tmp": [
transfer_comments
]
}

View File

@ -0,0 +1,64 @@
from rest_framework import serializers
from comment.models import Comment, User
from establishment.models import Establishment
class CommentSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
comment = serializers.CharField()
mark = serializers.DecimalField(max_digits=4, decimal_places=2)
locale = serializers.CharField()
account_id = serializers.IntegerField()
establishment_id = serializers.CharField()
class Meta:
model = Comment
fields = (
"id",
"comment",
"mark",
"locale",
"account_id",
"establishment_id"
)
def validate(self, data):
data = self.set_old_id(data)
data = self.set_text(data)
data = self.set_mark(data)
data = self.set_establishment(data)
data = self.set_account(data)
return data
def set_text(self, data):
data['text'] = data.pop('comment')
return data
def set_mark(self, data):
if data['mark'] < 0:
data['mark'] = data['mark'] * -1
return data
def set_account(self, data):
try:
data['account'] = User.objects.filter(old_id=data['account_id']).first()
except User.DoesNotExist as e:
raise ValueError(f"User account not found with {data}: {e}")
del(data['account_id'])
return data
def set_establishment(self, data):
try:
data['establishment'] = Establishment.objects.filter(old_id=data['account_id']).first()
except Establishment.DoesNotExist as e:
raise ValueError(f"Establishment not found with {data}: {e}")
del(data['establishment_id'])
return data
def set_old_id(self, data):
data['old_id'] = data.pop("id")
return data