[Question] How to serialize and flatten embeddedField before save?
scheung38 opened this issue · 0 comments
scheung38 commented
Sample output is shown:
In this example I would like to flatten 'locality' Object before saving
serializer.py
class LocalitySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Locality
fields = ('_id', 'locality_key', 'filler1', 'filler2', 'post_town', 'dependent_locality', 'double_dependent_locality')
class AddressSerializer(serializers.HyperlinkedModelSerializer):
locality = LocalitySerializer()
locality_id = serializers.Field(source='locality._id')
locality_locality_key = serializers.Field(source='locality.locality_key')
locality_filler1 = serializers.Field(source='locality.filler1')
locality_filler2 = serializers.Field(source='locality.filler2')
locality_post_town = serializers.Field(source='locality.post_town')
locality_dependent_locality = serializers.Field(source='locality.dependent_locality')
locality_double_dependent_locality= serializers.Field(source='locality.double_dependent_locality')
class Meta:
model = Address
fields = ('outward_code', 'inward_code', 'locality')
model.py
from djongo import models
class Locality(models.Model):
_id = models.ObjectIdField()
locality_key = models.PositiveIntegerField(unique=True, help_text="The Locality Key")
filler1 = models.CharField(max_length=30, blank=True, help_text="First Filler")
filler2 = models.CharField(max_length=15, blank=True, help_text="Second Filler")
post_town = models.CharField(max_length=30, blank=True, help_text="post town")
dependent_locality = models.CharField(
max_length=35, blank=True, help_text="Dependent Locality"
)
double_dependent_locality = models.CharField(
max_length=35, blank=True, help_text="Double Dependent Locality"
)
class Meta:
abstract = False
ordering = [
"post_town",
]
def __str__(self):
return self.post_town
@property
def locality_set(self):
# if self.locality: ## where is locality
# loc_set = set((self.locality.filler1).split(' '))
# loc_set.update(set((self.locality.filler2).split(' ')))
loc_set = list((self.post_town).split(" "))
loc_set.extend((self.dependent_locality).split(" "))
loc_set.extend((self.double_dependent_locality).split(" "))
return loc_set
@property
def locality_dict(self):
locality_dict = {}
locality_dict['_id'] = self._id
locality_dict['locality_key'] = self.locality_key
locality_dict['filler1'] = self.filler1
locality_dict['filler2'] = self.filler2
locality_dict['post_town'] = self.post_town
locality_dict['dependent_locality'] = self.dependent_locality
locality_dict['double_dependent_locality'] = self.double_dependent_locality
return locality_dict
class Address(models.Model):
outward_code = models.CharField(
max_length=4, blank=True, help_text="Postcode: Outward Code"
)
inward_code = models.CharField(
max_length=3, blank=True, help_text="Postcode: Inward Code"
)
locality = models.EmbeddedField(
model_container=Locality,
)
objects = models.DjongoManager()
Used 'source=' attribute but it is still not flattened?