2015-07-15 10 views
2

После Джанго-Rest-рамочное Doc о Custom metadata Мне нужно добавить атрибут (Майат) для determine_metadata() метод, как это, например:Джанго-Rest Framework: Override determine_metadata() метод

def determine_metadata(self, request, view): 
     metadata = OrderedDict() 
     metadata['name'] = view.get_view_name() 
     metadata['description'] = view.get_view_description() 
     metadata['myatt'] = 'blablabla' 
     metadata['renders'] = [renderer.media_type for renderer in view.renderer_classes] 
     metadata['parses'] = [parser.media_type for parser in view.parser_classes] 
     if hasattr(view, 'get_serializer'): 
      actions = self.determine_actions(request, view) 
      if actions: 
       metadata['actions'] = actions 
     return metadata 

I отредактировал файл metadata.py в каталоге rest-framework только для проверки и работы. Однако правильно, я знаю, что переопределю метод define_metadata(), чтобы выполнить то, что я хочу. Моя проблема в том, что я не знаю , где и как я должен переопределить его. Вы можете мне помочь?

ответ

2

Вы можете создать класс MyCustomMetadata, который добавит дополнительный атрибут к метаданным.

Этот класс наследует класс SimpleMetadata, который является классом метаданных по умолчанию в DRF. Затем мы переопределим функцию determine_metadata(). Сначала мы вызываем super(), чтобы получить исходный metadata, возвращенный DRF, затем добавим наш дополнительный атрибут к metadata.

my_app/metadata.py

from rest_framework.metadata import SimpleMetadata 

class MyCustomMetadata(SimpleMetadata): 

    def determine_metadata(self, request, view): 
     metadata = super(MyCustomMetadata, self).determine_metadata(request, view) 
     metadata['myatt'] = 'blablabla' # add extra attribute to metadata 
     return metadata # return the metadata with the extra attribute set in it 

Теперь нам нужно определить MyCustomMetadata класс в наших настройках, которые будут использоваться ФПИ тогда.

settings.py

REST_FRAMEWORK = { 
    ... 
    'DEFAULT_METADATA_CLASS': 'my_app.metadata.MyCustomMetadata' 
} 
Смежные вопросы