Thank you Mark. I was able to fix the problem with this bit of Claude code for
"mailman-web shell":
from allauth.account.models import EmailAddress
from django.db.models.functions import Lower
# Get all email addresses
all_emails = EmailAddress.objects.all()
# Group by user_id and lowercase email
seen = {}
to_delete = []
for email_obj in all_emails:
key = (email_obj.user_id, email_obj.email.lower())
if key in seen:
# We have a duplicate - decide which to keep
existing = seen[key]
# Keep verified over unverified
if email_obj.verified and not existing.verified:
to_delete.append(existing.id)
seen[key] = email_obj
# Keep primary over non-primary
elif email_obj.primary and not existing.primary:
to_delete.append(existing.id)
seen[key] = email_obj
# Keep lowercase version
elif email_obj.email == email_obj.email.lower():
to_delete.append(existing.id)
seen[key] = email_obj
else:
to_delete.append(email_obj.id)
else:
seen[key] = email_obj
print(f"Will delete {len(to_delete)} duplicate entries")
# Delete duplicates
if to_delete:
EmailAddress.objects.filter(id__in=to_delete).delete()
print("Duplicates removed!")
_______________________________________________
Mailman-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
Archived at:
https://lists.mailman3.org/archives/list/[email protected]/message/YQLC34YJTTXSA7I3LQ6RM7ZBOEVOUNWV/
This message sent to [email protected]