|
46 | 46 | from django.db import IntegrityError |
47 | 47 | from django.db.models import Prefetch |
48 | 48 | from django.http import HttpResponse |
| 49 | +from django.shortcuts import get_object_or_404 |
49 | 50 | from django_filters.rest_framework import DjangoFilterBackend |
50 | 51 |
|
51 | 52 | from groups_manager.models import Member |
@@ -641,6 +642,33 @@ def get_permissions(self): |
641 | 642 |
|
642 | 643 | return super(InformationPackageViewSet, self).get_permissions() |
643 | 644 |
|
| 645 | + def get_object(self): |
| 646 | + queryset = self.filter_queryset(self.get_queryset()) |
| 647 | + |
| 648 | + # Perform the lookup filtering. |
| 649 | + lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field |
| 650 | + |
| 651 | + assert lookup_url_kwarg in self.kwargs, ( |
| 652 | + 'Expected view %s to be called with a URL keyword argument ' |
| 653 | + 'named "%s". Fix your URL conf, or set the `.lookup_field` ' |
| 654 | + 'attribute on the view correctly.' % |
| 655 | + (self.__class__.__name__, lookup_url_kwarg) |
| 656 | + ) |
| 657 | + |
| 658 | + lookup_field = self.lookup_field |
| 659 | + |
| 660 | + objid = self.request.query_params.get('objid') |
| 661 | + if objid is not None: |
| 662 | + lookup_field = 'object_identifier_value' |
| 663 | + |
| 664 | + filter_kwargs = {lookup_field: self.kwargs[lookup_url_kwarg]} |
| 665 | + obj = get_object_or_404(queryset, **filter_kwargs) |
| 666 | + |
| 667 | + # May raise a permission denied |
| 668 | + self.check_object_permissions(self.request, obj) |
| 669 | + |
| 670 | + return obj |
| 671 | + |
644 | 672 | def get_queryset(self): |
645 | 673 | user = self.request.user |
646 | 674 | queryset = InformationPackage.objects.visible_to_user(user) |
|
0 commit comments