fix: only delete exact alias matches in delete_bulk
This commit is contained in:
1 file changed
+4
-5
+4
-5
@@ -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()
|
||||
|
||||
|
||||
Reference in new issue
Block a user