def get_meta(self) -> t.Generator[t.Dict, None, None]:
"""
:return: generator
list(metadata_obj.get_meta()) -> [abstract_field_obj1, abstract_field_obj2, ...]
"""
fields_by_name = OrderedDict()
for field_data in self.fields:
fields_by_name[field_data['name']] = field_data
for k, v_callable in self.__class__.__dict__.items():
# method `get_field_<NAME>` used for updates later
if k.startswith('get_field_'): # get_field_ ????????? ???????????? ????
continue
if not k.startswith('get_'):
continue
# check dynamic get_%s fields
# method get_%s must return {'name': '<NAME>'}, where <name> is a real field name
res = v_callable(self, self.request)
fields_by_name[res['name']] = res
fields_order = self.order or fields_by_name.keys()
for field_name in fields_order:
field_value = fields_by_name[field_name]
# method should update field with returned dict
method = getattr(self, 'get_field_%s' % field_name, None)
if callable(method):
field_value.update(method(field_name, self.request))
yield field_value
# noinspection PyMethodMayBeStatic,PyUnusedLocal
评论列表
文章目录