Я пытаюсь создать 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 / не позволяет, по сути, возвращать то же самое.