Właśnie zauważyłem błąd z model_to_dict, że pomija wszystkie DateTimeField w modelu i nigdy nie konwertować ich do słownika, podczas gdy funkcja wartości() nie QuerySet funkcji. Spojrzałem w Internecie, ale nie mogłem znaleźć nikogo, kto miałby ten sam problem. Chcę tylko potwierdzić, że to rzeczywiście jest problem, który napotykają inni ludzie i zobaczyć, co ludzie robią, aby go rozwiązać. Czy wszyscy po prostu unikają używania mode_to_dict w tym przypadku i próbują emulować zachowanie za pomocą wartości()? Czy istnieje lepsze rozwiązanie? Jakie są Twoje myśli?Django model_to_dict pomija wszystkie DateTimeField podczas konwersji modeli
Dzięki!
Poniżej znajduje się:
>>> 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'}
Jak widać pole „utworzenia create_time” nie ma w słowniku. Musiałem ręcznie wstawić go:
>>> 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:
Chyba znalazłem problem: W model_to_dict():
opts = instance._meta
for f in opts.fields:
if not f.editable:
continue
A moja utworzenia create_time pole jest pokazany jako nie można edytować. Dalsze badania wskazują, że auto_now_add = True automatycznie dokona edycji = Fałsz. Powodując model_to_dict(), aby go pominąć ...
dziwne, coś nie tak z moją instalacją django? Pozwól, że opublikuję moje wyniki. Jakiej wersji django używasz? Kopalni wersja 1.4.3 final – pinghsien422
Python 2.7.3 (domyślnie, 01 sierpnia 2012, 05:14:39) django.VERSION (1, 4, 5, 'ostateczny', 0) –
pozwól mi spróbować upgrate django zobacz czy to rozwiązuje problem – pinghsien422