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 ...
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
Python 2.7.3 (di default, 1 Agosto 2012, 05:14:39) django.VERSION (1, 4, 5, 'finale', 0) –
mi permetta di provare upgrate django vedi se questo risolve il problema – pinghsien422