def get_attributes( self, mapper: event_models.AttributeEventModuleMapper) -> dict: event_id = self.context['view'].kwargs.get("event_pk", None) registrations: QuerySet[ event_models. Registration] = event_models.Registration.objects.filter( event=event_id) registration_tags = [] attribute_sum = 0 for registration in registrations.all(): tags = registration.tags.filter(template=False, template_id=mapper.attribute.id) if mapper.attribute.polymorphic_ctype.app_labeled_name == 'basic | integer attribute': attribute_sum += tags.aggregate( sum=Sum('integerattribute__integer_field'))['sum'] or 0 elif mapper.attribute.polymorphic_ctype.app_labeled_name == 'basic | float attribute': attribute_sum += tags.aggregate( sum=Sum('floatattribute__integer_field'))['sum'] or 0 serialized_registration = RegistrationAttributeGetSerializer( registration, many=False).data for tag in tags.all(): serialized_tag = basic_serializers.AbstractAttributeGetPolymorphicSerializer( tag, many=False).data result = { 'registration': serialized_registration, 'tag': serialized_tag, } registration_tags.append(result) return {'data': registration_tags, 'sum': attribute_sum}
def create(self, request, *args, **kwargs) -> Response: serializer: basic_serializers.AbstractAttributePutPolymorphicSerializer = self.get_serializer( data=request.data) serializer.is_valid(raise_exception=True) registration_id = self.kwargs.get("registration_pk", None) registration: event_models.Registration = get_object_or_404( event_models.Registration, id=registration_id) template_attribute: basic_models.AbstractAttribute = \ get_object_or_404(basic_models.AbstractAttribute, pk=serializer.data.get('template_id', -1)) new_attribute = add_event_attribute(template_attribute) serializer.update(new_attribute, serializer.validated_data) registration.tags.add(new_attribute.id) json = basic_serializers.AbstractAttributeGetPolymorphicSerializer( new_attribute) return Response(json.data, status=status.HTTP_201_CREATED)
def update(self, request, *args, **kwargs) -> Response: super().update(request, *args, **kwargs) json = basic_serializers.AbstractAttributeGetPolymorphicSerializer( self.get_object()) return Response(json.data, status=status.HTTP_200_OK)
class AttributeEventModuleMapperSerializer(serializers.ModelSerializer): attribute = basic_serializers.AbstractAttributeGetPolymorphicSerializer(many=False, read_only=False) class Meta: model = event_models.AttributeEventModuleMapper fields = '__all__'
def get_tags(self, registration: event_models.Registration) -> []: queryset = registration.tags.filter(in_summary=True) serializer = basic_serializers.AbstractAttributeGetPolymorphicSerializer( queryset, many=True) return serializer.data