문제

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는 참조하십시오 문서.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top