2013-04-18 8 views
7

Ho appena notato un bug con model_to_dict che ignora tutti i DateTimeField nel modello e non li converte mai nel dizionario, mentre non usa la funzione values ​​() di QuerySet. Ho guardato su internet ma non ho trovato nessuno con lo stesso problema. Voglio solo confermare che questo è davvero un problema che altre persone hanno incontrato e vedere cosa fa la gente per risolverlo. Evita a tutti di usare model_to_dict in questo caso e prova ad emulare il comportamento usando values ​​()? O c'è una soluzione migliore? Quali sono i tuoi pensieri?Django model_to_dict salta tutti i DateTimeField durante la conversione dei modelli

Grazie!

riportano di seguito le out:

>>> member = Member.objects.get(id=1) 
>>> member.create_time 
datetime.datetime(2013, 2, 26, 6, 1, 2, tzinfo=<UTC>) 
>>> model_to_dict(member) 
{'verified': True, 'name': u'John', 'email': u'', 'phone': u'', 'id': 1L, 'password': u'4e3fc0574fbcdff16c8508339e', 'verify_token': u'5d98aacaba39eb7e'} 

Come si può vedere il campo 'create_time' non è presente nel dizionario. Ho dovuto inserire manualmente:

>>> obj = model_to_dict(member) 
>>> obj 
{'verified': True, 'name': u'John', 'email': u'', 'phone': u'', 'id': 1L, 'password': u'4e3fc0574fbcdff16c8508339e', 'verify_token': u'5d98aacaba39eb7e'} 
>>> obj["create_time"] = member.create_time 
>>> obj 
{'verified': True, 'name': u'John', 'email': u'', 'phone': u'', 'create_time': datetime.datetime(2013, 2, 26, 6, 1, 2, tzinfo=<UTC>), 'id': 1L, 'password': u'4e3fc0574fbcdff16c8508339e', 'verify_token': u'5d98aacaba39eb7e'} 
>>> 

EDIT:

Credo di aver trovato il problema: In model_to_dict():

opts = instance._meta 
for f in opts.fields: 
    if not f.editable: 
     continue 

E la mia create_time campo viene visualizzato come non modificabile. Ulteriori ricerche indicano che auto_now_add = True renderà automaticamente editable = False. provocando così model_to_dict() per saltare ...

risposta

9

ho trovato la causa da auto_now_add = True, si imposta automaticamente modificabile = False, che provoca model_to_dict() saltare i campi

0

non riesco a riprodurre il problema

>>> pprint(model_to_dict(User.objects.get(pk=1))) 
{'date_joined': datetime.datetime(2013, 1, 21, 10, 56, 6, tzinfo=<UTC>), 
'email': u'[email protected]', 
'first_name': u'\u042d\u0434\u0443\u0430\u0440\u0434', 
'groups': [], 
'id': 1, 
'is_active': True, 
'is_staff': True, 
'is_superuser': True, 
'last_login': datetime.datetime(2013, 3, 26, 12, 10, 28, 834151, tzinfo=<UTC>), 
'last_name': u'\u0418\u0441\u043a\u0430\u043d\u0434\u0430\u0440\u043e\u0432', 
'password': u'pbkdf2_sha256$10000$n8t2YQB1MaZE$lVg5bbp22ixDNQCj7AjtzGJ3WzOUnJo24137fTOxwi4=', 
'user_permissions': [], 
'username': u'1'} 
+0

strano, qualcosa di sbagliato con la mia installazione di django, allora? Lasciatemi pubblicare la mia uscita. Che versione di django stai usando? Il mio è la versione 1.4.3 finale – pinghsien422

+0

Python 2.7.3 (di default, 1 Agosto 2012, 05:14:39) django.VERSION (1, 4, 5, 'finale', 0) –

+0

mi permetta di provare upgrate django vedi se questo risolve il problema – pinghsien422

Problemi correlati