Sulla base del DRF documentation ho un creato un elenco di EMAIL_ID memorizzati nel mio modello nel modo seguente Models.py
Django Riposo quadro: modo corretto di serializzare ListFields
class UserData(models.Model):
emails = models.CharField(max_length=100,blank=False)
Nel mio file serializers.py
class UserSerializer(serializers.ModelSerializer):
emails = serializers.ListField(child = serializers.EmailField())
Durante la pubblicazione dei dati, la pagina Drf mostra i dati nel formato previsto, ovvero
"emails": [
"[email protected]"
],
Ma, se interrogo gli stessi dati utilizzando python o qualsiasi resto del client. Ottengo i dati nel seguente formato
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']']
Idealmente, avrebbe dovuto essere
d['emails'] = ['[email protected]']
Non sono sicuro, che cosa esattamente è sbagliato qui. Eventuali suggerimenti ?
Ci ho pensato. C'è troppo fastidio nel creare una o più associazioni. Preferisco che sia memorizzato come una matrice di ID e-mail. Un semplice trucco potrebbe essere quello di aggiungere più e-mail con "," (virgola). Ma spero che drf possa dare una risposta JSON come array. – Rahul
Bene, dal momento che stai usando django e un database relazionale, questo è il modo giusto di fare le cose. Ma, se stai usando postgres, puoi provare il nuovo [campo JSON] (https://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#django.contrib.postgres.fields. JSONField) – demux
DRF è anche molto flessibile e il codice sorgente è chiaro. Puoi estrarre tutti i tipi di acrobazie folli utilizzando campi personalizzati. In ogni caso un 'CharField' non è la scelta giusta per un campo di posta elettronica multiplo. Leggi questo: [Django List Field In Model] (http://stackoverflow.com/questions/22340258/django-list-field-in-model) – demux