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

Popular posts from this blog

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -