refactor: optimize log_invalid query pattern in UserProjectMembership.with_role() #1101
+19
−10
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Optimizes the
with_role()method'slog_invalidparameter to use a single aggregation query instead of multiple queries and per-row logging.List of Changes
UserProjectMembershipQuerySet.with_role()to use.values().annotate(Count())aggregation.select_related("user", "project")joinsRelated Issues
Relates to #1096
Detailed Description
The original implementation when
log_invalid=Trueexecuted two queries (.exists()+ iteration with.select_related()) and logged one warning per invalid membership. In API request paths with many invalid memberships, this added overhead and generated noisy logs.Before:
After:
Reduces query count from 2 to 1 and log output from N to 1 summary message.
How to Test the Changes
.with_role(log_invalid=True)(e.g., GET /api/projects/{id}/members/)Screenshots
N/A
Deployment Notes
No deployment actions required. Changes are backward compatible.
Checklist
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.