def angular_model(model, angular_model_name, extra_params={}):
""" Returns javascript that preprocesses obj before attaching it to window
where angular controller can grab it """
ret = "<script>\n"
if model is None:
ret += "window.%s = {};\n" % (angular_model_name)
else:
# cast foreign key and m2m fields to be strings
json_ret = model.to_json()
model_dict = json.loads(json_ret)
fk_fields = model.get_foreign_key_fields()
m2m_fields = model.get_many_to_many_fields()
for field, val in model_dict["fields"].iteritems():
if field in fk_fields:
model_dict["fields"][field] = str(val)
if field in m2m_fields:
model_dict["fields"][field] = map(str, val)
ret += "window.%s = %s;\n" % (angular_model_name, json.dumps(model_dict, sort_keys=True))
# adds converter for datetime fields
for field in model.READABLE_ATTRS(type_filter=models.DateField):
# DateTimeFields are instances of DateFields
ret += ("window.%s.fields.%s = new Date(window.%s.fields.%s);\n" %
(angular_model_name, field, angular_model_name, field))
# date_fields = model.WRITEABLE_ATTRS(type_filter=models.DateField, type_exclude=models.DateTimeField)
# date_fields = json.dumps(date_fields)
# ret += "window.%s.date_fields = %s" % (angular_model_name, date_fields)
ret += "</script>\n"
return mark_safe(ret)
评论列表
文章目录