Nie bezpośrednio odpowiedź na pytanie, ale uważam, że ten kod pomógł mi stworzyć dyktando, które ładnie zapisuje poprawną odpowiedź. Konwersje typów są wymagane, jeśli dane zostaną wyeksportowane do json.
Mam nadzieję, że to pomoże:
#mod is a django database model instance
def toDict(mod):
import datetime
from decimal import Decimal
import re
#Go through the object, load in the objects we want
obj = {}
for key in mod.__dict__:
if re.search('^_', key):
continue
#Copy my data
if isinstance(mod.__dict__[key], datetime.datetime):
obj[key] = int(calendar.timegm(ts.utctimetuple(mod.__dict__[key])))
elif isinstance(mod.__dict__[key], Decimal):
obj[key] = float(mod.__dict__[key])
else:
obj[key] = mod.__dict__[key]
return obj
def toCsv(mod, fields, delim=','):
import datetime
from decimal import Decimal
#Dump the items
raw = []
for key in fields:
if key not in mod.__dict__:
continue
#Copy my data
if isinstance(mod.__dict__[key], datetime.datetime):
raw.append(str(calendar.timegm(ts.utctimetuple(mod.__dict__[key]))))
elif isinstance(mod.__dict__[key], Decimal):
raw.append(str(float(mod.__dict__[key])))
else:
raw.append(str(mod.__dict__[key]))
return delim.join(raw)
Dzięki, to jest dokładnie to, czego szukałem do zrobienia. Ponadto, jako notatkę po prostu opiera się na swoim poście. Nie musisz wywoływać metody składowania podczas używania Model.objects.create (** data_dict). Prawdopodobnie już to wiesz, ale tylko heads-up. –
Nie użyłem wcześniej metody 'objects.create', więc nauczyłeś mnie czegoś nowego. – Alasdair
również objects.create zwraca wskaźnik do nowego modelu, z poprawnym wypełnionym pk. Oznacza to, że możesz od razu użyć go do zbudowania podobnych modeli. –