2013-04-18 8 views
7

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ąć ...

Odpowiedz

9

znalazłem przyczynę należy auto_now_add = True, to automatycznie ustawia edytowalne = False, co powoduje model_to_dict() pomiń pola

0

nie może replikować Twój problem

>>> 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

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

+0

Python 2.7.3 (domyślnie, 01 sierpnia 2012, 05:14:39) django.VERSION (1, 4, 5, 'ostateczny', 0) –

+0

pozwól mi spróbować upgrate django zobacz czy to rozwiązuje problem – pinghsien422

Powiązane problemy