Как исправить поиск данных URL с помощью модуля drf-множественной модели? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь создать API с использованием модуля drf-множественной модели, но это создает проблему с URL-адресом одного экземпляра, так как в http://localhost:8000/categories/partner-spec-categories// данные отсутствуют.Где может быть проблема?

Я использую Python 3.6.5, Django 2.2.2, MySQL 8.0.16.

На данный момент я сосредоточен только на ott.cat.master.viewset, поэтому другие маршрутизаторы не имеют base_name.

urls.py

router = routers.DefaultRouter()
router.register(r'general-categories', gen.cat_master_viewset.CatMasterView)
router.register(r'gen-cat-settings', gen.cat_settings_viewset.CatSettingsView)
router.register(r'partner-spec-catagories', ott.cat_master_viewset.CatMasterView,base_name='partner-spec-catagories')
router.register(r'spec-cat-settings', ott.cat_settings_viewset.CatSettingsView)

Файл viewset.py У меня проблемы с

class CatMasterView(FlatMultipleModelAPIViewSet,viewsets.ModelViewSet):

    all_or_none_response = False

    def partner_id_filter(queryset,request,*args,**kwargs):
        global all_or_none_response
        final_queryset = queryset
        if PartnerMaster.objects.filter(partner_id=request.query_params.get('partner_id')).exists():
            partner_to_get = request.query_params.get('partner_id')
            if partner_to_get == None:
                all_or_none_response = False
            else:
                all_or_none_response = True
                final_queryset = final_queryset.filter(partner_id=partner_to_get)
        if OttCategoryMaster.objects.filter(id=request.query_params.get('id')).exists():
            id_to_get = request.query_params.get('id')
            if id_to_get == None:
                all_or_none_response = False
            else:
                all_or_none_response = True
                final_queryset = final_queryset.filter(id=id_to_get)
        if OttCategoryMaster.objects.filter(name=request.query_params.get('name')).exists():
            name_to_get = request.query_params.get('name')
            if name_to_get == None:
                all_or_none_response = False
            else:
                all_or_none_response = True
                final_queryset = final_queryset.filter(name=name_to_get)
        return final_queryset


    def all_or_none_response_filter(queryset,request,response=all_or_none_response,*args,**kwargs):

        if response:
            pass
        else:
            queryset = None

        if PartnerMaster.objects.filter(partner_id=request.query_params.get('partner_id')).exists():
            pass
        else:
            queryset = None

        return queryset

    querylist = [
                {'queryset':OttCategoryMaster.objects.all(),
                'serializer_class':ott_cat_master_serializer,
                'label':'ott_categories',
                'filter_fn':partner_id_filter,},

                {'queryset':CategoryMaster.objects.all(),
                'serializer_class':gen_cat_master_serializer,
                'label':'gen_categories',
                'filter_fn':all_or_none_response_filter}
                ]
    def get_serializer_class(self):
        return ott_cat_master_serializer

Хотя фильтрация ... /? Id = 1 работает, использование ... / 1 ​​/ не позволяет, по сути, возвращать то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...