Django 모델은 Ajax 직렬화 가능하지 않습니다
-
12-09-2019 - |
문제
Ajax를 실험하는 데 사용하는 간단한 견해가 있습니다.
def get_shifts_for_day(request,year,month,day):
data= dict()
data['d'] =year
data['e'] = month
data['x'] = User.objects.all()[2]
return HttpResponse(simplejson.dumps(data), mimetype='application/javascript')
이것은 다음을 반환합니다.
TypeError at /sched/shifts/2009/11/9/
<User: someguy> is not JSON serializable
데이터를 참조하지 않도록 데이터 [ 'x'] 줄을 꺼내면 작동하고 다음을 반환합니다.
{"e": "11", "d": "2009"}
SimpleJson이 기본 Django 모델 중 하나를 구문 분석 할 수없는 이유는 무엇입니까? 나는 내가 사용하는 모든 모델에서 동일한 동작을 얻습니다.
해결책
당신은 당신의 추가 만하면됩니다 .dumps
전화, a default=encode_myway
하자 simplejson
유형이 모르는 데이터를 전달할 때해야 할 일을 알고 있습니다. "왜"질문에 대한 답은 물론 당신이하지 않은 것입니다. 말했다 가난한 simplejson
모델 인스턴스 중 하나와 관련하여해야 할 일.
물론 당신은 써야합니다 encode_myway
JSON에 인코링 가능한 데이터를 제공하려면 예를 들어 :
def encode_myway(obj):
if isinstance(obj, User):
return [obj.username,
obj.firstname,
obj.lastname,
obj.email]
# and/or whatever else
elif isinstance(obj, OtherModel):
return [] # whatever
elif ...
else:
raise TypeError(repr(obj) + " is not JSON serializable")
기본적으로 JSON은 매우 기본 데이터 유형 (문자열, INT 및 플로트, 딘스 및 목록으로 그룹화)에 대해 알고 있습니다. 그러한 기본 데이터 유형에 대한 다른 모든 내용과 일치하는 것은 응용 프로그램 프로그래머로서 귀하의 책임입니다. simplejson
일반적으로 전달 된 함수를 통해 수행됩니다 default=
~에 dump
또는 dumps
시각.
또는 사용할 수 있습니다 json
Django의 일부인 Serializer는 참조하십시오 문서.
제휴하지 않습니다 StackOverflow