-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
#3528: Fix error handling on new member form - [ZA] #3606
Conversation
🥳 Successfully deployed to developer sandbox za. |
@@ -445,3 +445,26 @@ class PortfolioNewMemberForm(BasePortfolioMemberForm): | |||
class Meta: | |||
model = PortfolioInvitation | |||
fields = ["portfolio", "email", "roles", "additional_permissions"] | |||
|
|||
def _post_clean(self): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
An alternative to this approach would be to modify the error itself in portfolio_helper. The reason why this is not done is because there is a separate AC which requires a certain message on django admin.
This is the earliest hook I could find to modify this, but if you know of something earlier let me know!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The only other place I can think to do this would be in the PortfolioAddMemberView before the form even submits. That said, I honestly don't know if that would be any better and I have no problem with this current approach.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah it's tricky, I spent a long time staring at Django's codebase trying to figure this one out. Thanks for the feedback here
🥳 Successfully deployed to developer sandbox za. |
🥳 Successfully deployed to developer sandbox za. |
🥳 Successfully deployed to developer sandbox za. |
🥳 Successfully deployed to developer sandbox za. |
1 similar comment
🥳 Successfully deployed to developer sandbox za. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One question, otherwise looks great
@@ -445,3 +445,26 @@ class PortfolioNewMemberForm(BasePortfolioMemberForm): | |||
class Meta: | |||
model = PortfolioInvitation | |||
fields = ["portfolio", "email", "roles", "additional_permissions"] | |||
|
|||
def _post_clean(self): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The only other place I can think to do this would be in the PortfolioAddMemberView before the form even submits. That said, I honestly don't know if that would be any better and I have no problem with this current approach.
|
||
# Errors denoted as "__all__" are special error types reserved for the model level clean function | ||
if override_error and "__all__" in self._errors: | ||
del self._errors["__all__"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this error be re-raised at the end here in case none of those conditionals hit?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nah, not needed. But good thoughts. One con of this approach is that super()._post_clean()
does generate the error list on its own. self.instance.clean()
is technically code duplication, but it is low-cost. This logic essentially works by generating the error list twice, and hot-swapping the error.
The pro of this approach is that all other error types are "carried through" so even if the underlying clean changes, everything will work normally as it seems like post clean doesn't rely on try/catch. Only one error is raised at a time here, so we can get away with doing this.
The problem I was facing is that _post_clean is not defined normally, its generated on the fly based off of rules I do not fully understand as of now. In other words, its very much an internal function that would require inheriting at a very low level
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work
🥳 Successfully deployed to developer sandbox za. |
Ticket
Resolves #3528
Changes
Context for reviewers
This PR adds an override for the error message on the new member form
Setup
The easiest way to test this is to try to invite yourself as a member on the portfolio form, this will trigger the first error message. To test the invitation message, you will need to remove the invite on the current portfolio and add that invite to another portfolio. This can be done easily via django admin. Then invite that portfolio to the current portfolio.
Code Review Verification Steps
As the original developer, I have
Satisfied acceptance criteria and met development standards
Ensured code standards are met (Original Developer)
Validated user-facing changes (if applicable)
As a code reviewer, I have
Reviewed, tested, and left feedback about the changes
Validated user-facing changes as a developer
Note: Multiple code reviewers can share the checklists above, a second reviewer should not make a duplicate checklist. All checks should be checked before approving, even those labeled N/A.
As a designer reviewer, I have
Verified that the changes match the design intention
Validated user-facing changes as a designer
References
Screenshots