def get(self, request, pk=None, **kwargs): """ Получает объект согласно привилегий """ if pk: try: object = self.queryset(request, **kwargs).get(pk=pk) except: return get_http_404(request) return self.get_object_detail(request, object, **kwargs) else: return self.get_collection(request, **kwargs)
def copy(self, request, pk, clone=None, **kwargs): """ Получает копию объекта согласно привилегий. """ if self.has_add_permission(request): try: object = self.queryset(request, **kwargs).get(pk=pk) except: return get_http_404(request) return self.get_copy_object_detail(request, object, clone, **kwargs) else: return get_http_403(request)
def get_collection(self, request, pk, **kwargs): """ Метод получения вложенных объектов """ try: object = self.related_model.queryset(request).get(pk=pk) except: return get_http_404(request) qs = getattr(object, self.related_name).select_related().all() qs = self.queryset_from_filters(qs, **kwargs) qs = self.filter_queryset(request, qs, **kwargs) qs = self.page_queryset(request, qs, **kwargs) total = self.get_queryset_total(qs) properties = [ x['name'] for x in self.get_list_display()\ if not x['name'] in self.get_fields() ] # Задаём использование натуральных ключей для того, чтобы не # ставился автоматически use_split_keys = True data = self.serialize(qs, use_natural_keys=True, properties=properties) if total: data['total'] = total return JSONResponse(data=data)