fix: only delete exact alias matches in delete_bulk

This commit is contained in:
ponas committed 2026-11-03 03:52:41 +01:00
1 parent 83eb8f07f2
commit 5ef366f667
1 file changed
+4 -5
+4 -5
View File
@@ -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()