python - Django Rest Framework: Correct way to serialize ListFields -
based on drf documentation have created list of email_id stored in model in following way models.py
class userdata(models.model): emails = models.charfield(max_length=100,blank=false) in serializers.py file
class userserializer(serializers.modelserializer): emails = serializers.listfield(child = serializers.emailfield()) while posting data, drf page shows data in expected format, i.e
"emails": [ "bal@bal.com" ], but, if query same data using python or rest client. data in following format
data = json.load(urllib2.urlopen("http://localhost:8000/blah/id")) in [46]: d['emails'] out[46]: [u'[', u'u', u"'", u'b', u'a', u'l', u'@', u'b', u'a', u'l', u'.', u'c', u'o', u'm', u"'", u']'] ideally, should have been
d['emails'] = ['bal@bal.com'] i not sure, wrong in here. suggestions ?
your model has 1 email field. not support storing multiple email in database. need this:
class useremail(models.model) user = models.foreignkey('user', related_name='emails') email = models.emailfield(unique=true) # can store other useful things here... activated = models.booleanfield(default=false) # example class user(models.model): ... class emailserializer(serializers.modelserializer): class meta: fields = ['id', 'email'] class userserializer(serializers.modelserializer): emails = emailserializer(many=true) however, result in different data structure:
[{ 'someuserfield': 'foobar', 'emails': [ {'id': 1, 'email': 'foo@bar.maz'}, {'id': 2, 'email': 'bill@gates.ms'}, ] }, { ... }] if don't want data structure, create custom field
or... if you're using postgresql should able this:
from django.contrib.postgres.fields import arrayfield class userdata(models.model): emails = arrayfield(models.emailfield(), blank=true)
Comments
Post a Comment