From 0e5aee73c3980c2576f8d1c90ecef7fb1dd92a78 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 26 Jan 2021 10:58:57 +0000 Subject: [PATCH] more work on serializing tags --- companies/serializers.py | 1 + products/serializers.py | 2 +- products/tests.py | 11 ++++++----- utils/tag_serializers.py | 12 ++++-------- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/companies/serializers.py b/companies/serializers.py index f3254d0..dd115ae 100644 --- a/companies/serializers.py +++ b/companies/serializers.py @@ -3,6 +3,7 @@ from companies.models import Company class CompanySerializer(serializers.ModelSerializer): + class Meta: model = Company exclude = ['created', 'updated', 'creator'] diff --git a/products/serializers.py b/products/serializers.py index 42e3d8a..d0521ea 100644 --- a/products/serializers.py +++ b/products/serializers.py @@ -6,7 +6,7 @@ from products.models import Product from utils.tag_serializers import SingleTagSerializerField, CustomTagSerializer -class ProductSerializer(CustomTagSerializer): +class ProductSerializer(TaggitSerializer, serializers.ModelSerializer): tags = TagListSerializerField(required=False) category = SingleTagSerializerField(required=False) # main tag category diff --git a/products/tests.py b/products/tests.py index 64f2474..0c291d0 100644 --- a/products/tests.py +++ b/products/tests.py @@ -8,6 +8,7 @@ from django.utils import timezone from rest_framework.test import APITestCase from rest_framework import status +from companies.factories import CompanyFactory from products.factories import ProductFactory from products.models import Product @@ -101,12 +102,12 @@ class ProductViewSetTest(APITestCase): """Regular logged-in user can create new instance """ # Define request data + company = CompanyFactory() data = { - 'company': None, + 'company': company.id, 'sku': 'qwerewq', 'name': 'qwerewq', 'description': 'qwerewq', - 'image': None, 'url': 'http://qwerewq.com', 'price': '12.21', 'shipping_cost': '21.12', @@ -128,7 +129,6 @@ class ProductViewSetTest(APITestCase): # Query endpoint response = self.client.post(self.endpoint, data=data, format='json') - # Assert endpoint returns created status self.assertEqual(response.status_code, status.HTTP_201_CREATED) @@ -145,8 +145,9 @@ class ProductViewSetTest(APITestCase): instance.save() # Define request data + company = CompanyFactory() data = { - 'company': None, + 'company': company.id, 'sku': 'qwerewq', 'name': 'qwerewq', 'description': 'qwerewq', @@ -173,7 +174,7 @@ class ProductViewSetTest(APITestCase): # Query endpoint url = self.endpoint + f'{instance.pk}/' response = self.client.put(url, data, format='json') - + import ipdb; ipdb.set_trace() # Assert endpoint returns OK code self.assertEqual(response.status_code, status.HTTP_200_OK) diff --git a/utils/tag_serializers.py b/utils/tag_serializers.py index cbf54b9..836fcf2 100644 --- a/utils/tag_serializers.py +++ b/utils/tag_serializers.py @@ -47,16 +47,11 @@ class SingleTagSerializerField(serializers.Field): return value -class CustomTagSerializer(serializers.ModelSerializer): +class CustomTagSerializer(serializers.Serializer): """ Differentiate between tags and single-tags """ - def __init__(self, instance=None, data='', **kwargs): - self.serializer_field_mapping[SingleTagSerializerField] = CharField - self.serializer_field_mapping[TagListSerializerField] = ListField - super(CustomTagSerializer, self).__init__(instance, data, **kwargs) - def create(self, validated_data): to_be_tagged, validated_data = self._pop_tags(validated_data) @@ -149,8 +144,9 @@ class CustomTagSerializer(serializers.ModelSerializer): def _pop_tags(self, validated_data): to_be_tagged = {} - for key in self.serializer_field_mapping.keys(): - field = self.serializer_field_mapping[key] + + for key in self.fields.keys(): + field = self.fields[key] if isinstance(field, TagListSerializerField): if key in validated_data: to_be_tagged[key] = validated_data.pop(key)