def obj_as_dict(self, request, obj):
data = self.serialize_obj(obj)
# serialize model instance fields datas
for field in obj._meta.get_fields():
if field.is_relation and field.concrete:
field_value = getattr(obj, field.name)
if field_value:
if field.many_to_many:
data[field.name] = self.serialize_objs(field_value.all())
elif field.many_to_one or field.one_to_one or field.one_to_many:
data[field.name] = self.serialize_obj(field_value)
# add custom admin class field to serialized bundle
model_admin_fields = self.get_model_admin_field_names(request, obj)
for field in model_admin_fields:
if field in data:
continue
if hasattr(obj, field):
f = getattr(obj, field)
data[field] = unicode(f)
if hasattr(self, field):
field_method = getattr(self, field)
if callable(field_method):
data[field] = field_method(obj)
else:
data[field] = field_method
info = self.model._meta.app_label, self.model._meta.model_name
admin_detail_url = str(reverse_lazy("admin:%s_%s_change" % info, args=(obj.id,)))
data["admin_detail_url"] = admin_detail_url
return data
评论列表
文章目录