podstawie DRF documentation mam stworzył listę email_id przechowywane w moim modelu w następujący sposób Models.py
Django Reszta ramowa: Prawidłowy sposób serializacji ListFields
class UserData(models.Model):
emails = models.CharField(max_length=100,blank=False)
W moim pliku serializers.py
class UserSerializer(serializers.ModelSerializer):
emails = serializers.ListField(child = serializers.EmailField())
Podczas publikowania danych strona drf pokazuje dane w oczekiwanym formacie, tj.
"emails": [
"[email protected]"
],
Ale, jeśli zapytanie o te same dane za pomocą Pythona lub dowolnego klienta odpoczynku. Mam dane w następującym formacie
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']']
Idealnie powinno być
d['emails'] = ['[email protected]']
Nie jestem pewien, co dokładnie jest nie tak tutaj. Jakieś sugestie ?
Myślałem o tym. Jest zbyt wiele kłopotów w tworzeniu jednego do wielu skojarzeń. Raczej mam to zapisane jako tablicę identyfikatorów e-mail. Jednym łatwym hackiem byłoby dołączanie wielu e-maili z "," (przecinek). Ale mam nadzieję, że drf da odpowiedź json jako tablicę. – Rahul
Cóż, ponieważ używasz django i relacyjnej bazy danych, jest to po prostu właściwy sposób robienia rzeczy. Ale jeśli używasz postgresów, możesz wypróbować nowe pole [JSON Field] (https://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#django.contrib.postgres.fields. JSONField) – demux
DRF jest również bardzo elastyczny, a kod źródłowy czytelny. Możesz wykonywać wszystkie rodzaje szalonych akrobacji za pomocą pól niestandardowych. W każdym razie 'CharField' nie jest właściwym wyborem dla wielu pól e-mail. Przeczytaj: [Pole listy Django w modelu] (http://stackoverflow.com/questions/22340258/django-list-field-in-model) – demux