from django.db.models import Model
from django.db.models.query import QuerySet
from django.http import HttpResponse
from django.utils.encoding import force_unicode
from django.utils.simplejson import dumps, JSONEncoder

def jsonify_model(model):
    model_dict = model.__dict__
    for key, value in model_dict.items():
        if key.startswith('_'):
            del model_dict[key]
        else:
            model_dict[key] = force_unicode(value)
    return model_dict

class API_JSONEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, QuerySet):
            return [jsonify_model(o) for o in obj]
        if isinstance(obj, Model):
            return jsonify_model(obj)
        return JSONEncoder.default(self,obj)

class JSONResponse(HttpResponse):
    status_code = 200

    def __init__(self, data):
        json_response = dumps(data, ensure_ascii=False, indent=2, cls=API_JSONEncoder)
        HttpResponse.__init__(self, json_response, mimetype="text/javascript")