I think you need to join your Q()
filters with a logical operator like |
or &
.
authors = Author.objects.filter(
(Q(name__iregex=r"\y{0}\y".format(s1)) &
~Q(name__iregex=r"\y{0}\y".format(s2))
),
person=None).order_by('-id')