summaryrefslogtreecommitdiff
path: root/src/mailman/model/subscriptions.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/model/subscriptions.py')
-rw-r--r--src/mailman/model/subscriptions.py16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/mailman/model/subscriptions.py b/src/mailman/model/subscriptions.py
index 443128edb..6819c112c 100644
--- a/src/mailman/model/subscriptions.py
+++ b/src/mailman/model/subscriptions.py
@@ -88,7 +88,8 @@ class SubscriptionService:
# joined on the member's user. Add the resulting email address to the
# selected values to be able to sort on it later on.
q_address = store.query(Member, Address.email).join(Member._address)
- q_user = store.query(Member, Address.email).join(Member._user)
+ q_user = store.query(Member, Address.email).join(
+ User, User.id == Member.user_id).join(User._preferred_address)
if subscriber is not None:
if isinstance(subscriber, str):
# subscriber is an email address.
@@ -97,19 +98,20 @@ class SubscriptionService:
subscriber = subscriber.replace('*', '%')
q_address = q_address.filter(
Address.email.like(subscriber))
- q_user = q_user.join(User.addresses).filter(
- Address.email.like(subscriber))
+ q_user = q_user.filter(Address.email.like(subscriber))
else:
q_address = q_address.filter(
Address.email == subscriber)
- q_user = q_user.join(User.addresses).filter(
- Address.email == subscriber)
+ q_user = q_user.filter(Address.email == subscriber)
else:
# subscriber is a user id.
q_address = q_address.join(Address.user).filter(
User._user_id == subscriber)
- q_user = q_user.join(User._preferred_address).filter(
- User._user_id == subscriber)
+ q_user = q_user.filter(User._user_id == subscriber)
+ else:
+ # We're not searching for a subscriber, only select preferred
+ # addresses (see issue 227).
+ q_user = q_user.filter(Address.id == User._preferred_address_id)
# Add additional filters to both queries.
if list_id is not None:
q_address = q_address.filter(Member.list_id == list_id)