Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ItemSerializer(serializers.ModelSerializer):
- class Meta:
- model = models.Item
- exclude = ('modified',)
- extra_kwargs = {'key': {'write_only': True}}
- robot_name = serializers.ReadOnlyField(source='run.robot.name')
- class ItemsFilterset(FilterSet):
- class Meta:
- model = Item
- fields = {'run': ['exact']}
- item_id = CompoundRegexFilter(field_name='name', lookup_expr='regex')
- additional_info = CompoundRegexFilter(field_name='reference', lookup_expr='regex')
- start = DateTimeFromToRangeFilter(lookup_expr='exact')
- end = DateTimeFromToRangeFilter(lookup_expr='exact')
- status = MultipleChoiceFilter(choices=ITEM_STATUS_CHOICES, lookup_expr='exact')
- robot = NumberInFilter(field_name='run__robot__id', lookup_expr='in')
- class PDItemViewSet(ReadOnlyModelViewSet):
- """List all latest items reported by PD robots."""
- permission_required = 'core.view_item'
- permission_classes = [IsAuthenticated & (HasUnitRole | HasPermission)]
- serializer_class = serializers.ItemSerializer
- filter_backends = [DjangoFilterBackend]
- filterset_class = ItemsFilterset
- def get_queryset(self):
- """Construct queryset of latest unique items."""
- items = models.Item.objects.order_by('key', '-modified').distinct('key')
- if not (self.request.user.is_superuser or self.request.user.is_staff):
- units = self.request.user.unit_roles.values('unit')
- items = items.filter(run__robot__unit__in=units)
- items = items.annotate(item_id=F('name'), additional_info=F('reference'), robot_name=F('run__robot__name'),
- duration=Epoch(F('end') - F('start')))
- items = self.filter_queryset(items)
- return items
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement