diff --git a/dpdapi/views.py b/dpdapi/views.py index 082e9b5..65b238d 100644 --- a/dpdapi/views.py +++ b/dpdapi/views.py @@ -41,13 +41,12 @@ class AliasViewSet(ListModelMixin, GenericViewSet): serializer.is_valid(raise_exception=True) - # Ref: http://michelepasin.org/blog/2010/07/20/the-power-of-djangos-q-objects/ - q_list = map(lambda x: Q(**x), serializer.initial_data) - aliases = Alias.objects.filter(reduce(operator.or_, q_list)) + keys = {(a['source'], a['destination'], a['domain'].pk) for a in serializer.validated_data} + query = reduce(operator.or_, (Q(source=s, destination=d, domain=dom) for s, d, dom in keys), Q(pk__in=[])) + aliases = Alias.objects.filter(query) - initial_set = set(map(lambda x: (x['source'], x['destination'], x['domain']), serializer.initial_data)) deleted_set = set(aliases.values_list('source', 'destination', 'domain')) - diff = initial_set.difference(deleted_set) + diff = keys - deleted_set logger.debug('Deleted: {}'.format(','.join(map(lambda x: '{0[0]}={0[1]}'.format(x), deleted_set)))) aliases.delete()