Código fuente para laboratory.shelfobject_container.viewsets

from django.conf import settings
from django.http import Http404
from django.shortcuts import get_object_or_404
from djgentelella.objectmanagement import AuthAllPermBaseObjectManagement
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter, OrderingFilter
from rest_framework.pagination import LimitOffsetPagination

from auth_and_perms.organization_utils import (
    user_is_allowed_on_organization,
    organization_can_change_laboratory,
)
from . import serializers
from ..models import ShelfObject, OrganizationStructure, Laboratory, Object
from ..utils import check_user_access_kwargs_org_lab


[documentos]class ContainerManagementViewset(AuthAllPermBaseObjectManagement): serializer_class = { "list": serializers.ContainerDataTableSerializer, } perms = { "list": ["laboratory.view_shelfobject"], "create": [], "update": [], "retrieve": [], "get_values_for_update": [], } queryset = ShelfObject.objects.all() pagination_class = LimitOffsetPagination filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter) search_fields = [ "object__name", ] # for the global search filterset_class = serializers.ContainerFilter ordering_fields = ["creation_date", "created_by", "status"] ordering = ("-creation_date",) # default order operation_type = ""
[documentos] def get_queryset(self): queryset = super().get_queryset() queryset = queryset.filter( shelf=self.shelf, object__type=Object.MATERIAL, object__is_container=True ) return queryset
def list(self, request, *args, **kwargs): self.shelf = kwargs["shelf"] org_pk = kwargs["org_pk"] lab_pk = kwargs["lab_pk"] organization = get_object_or_404( OrganizationStructure.objects.using(settings.READONLY_DATABASE), pk=org_pk ) user_is_allowed_on_organization(request.user, organization) laboratory = get_object_or_404( Laboratory.objects.using(settings.READONLY_DATABASE), pk=lab_pk ) organization_can_change_laboratory(laboratory, organization, raise_exec=True) if not check_user_access_kwargs_org_lab(org_pk, lab_pk, request.user): raise Http404() return super().list(request, *args, **kwargs)