Fix admin search fields and misc code quality issues - #12525
Open
bhumin18 wants to merge 8 commits into
Open
Conversation
Add search_fields to StockTrackingAdmin and StockItemTestResultAdmin - item__part__name: search tracking by part name - item__serial: search tracking by serial number - notes: search tracking notes - stock_item__part__name: search test results by part name - stock_item__serial: search test results by serial number - template__test_name: search test results by test template name - value: search test results by output value - notes: search test result notes Also adds a unit test to verify search_fields configuration.
…tTestTemplate Add search_fields to PartPricingAdmin, PartStocktakeAdmin, PartRelatedAdmin, and PartTestTemplateAdmin. - part__name, part__IPN, part__description: search PartPricing - part__name, part__IPN: search PartStocktake - part_1__name, part_2__name: search PartRelated - part__name, test_name, description: search PartTestTemplate Also adds unit test assertions to verify search_fields configuration.
Add search_fields to SalesOrderAllocationAdmin and ReturnOrderLineItemAdmin. SalesOrderAllocationAdmin: - line__order__reference: search by Sales Order reference - line__part__name: search by ordered Part name - item__part__name: search by allocated Stock Item part name - item__part__IPN: search by allocated Stock Item IPN - item__serial: search by Stock Item serial number ReturnOrderLineItemAdmin: - order__reference: search by Return Order reference - order__customer__name: search by Customer name - item__part__name: search by returned Item part name - item__serial: search by returned Item serial number - reference: search by line item reference Also adds list_display improvements and unit tests to verify search_fields configuration.
Use '!=' (value comparison) instead of 'is not' (identity comparison) when comparing custom_status.logical_key with self.instance.status. Python only caches small integers (-5 to 256). For status codes > 256, 'is not' can return True even when values are equal, causing valid custom status keys to be incorrectly rejected. Per PEP 8: always use '==' or '!=' for value comparisons.
The formfield_for_dbfield method was incorrectly calling super().formfield_for_choice_field() instead of super().formfield_for_dbfield(). These are different Django admin methods with different expectations. formfield_for_choice_field expects choice-type fields, but the 'column' field is a plain CharField. This could cause incorrect form rendering or errors when viewing DataImportSession detail in Django Admin. Fix: call the correct parent method formfield_for_dbfield().
The delete() method used '*kwargs' which collects positional arguments into a tuple named 'kwargs'. This breaks Django's Model.delete() contract which expects keyword arguments (using=None, keep_parents=False). When super().delete(*kwargs) was called, keyword arguments passed by Django internals would be unpacked incorrectly as positional args. Fix: use standard '*args, **kwargs' signature and pass both to super().
Replace bare 'except:' with 'except Exception:' in validate_status_custom_key method. Bare except catches all BaseException subclasses including SystemExit, KeyboardInterrupt, and MemoryError which should never be silenced. The get_logical_value() function performs a database .get() call that can raise ObjectDoesNotExist or MultipleObjectsReturned, both of which are subclasses of Exception. This follows PEP 8 (E722: do not use bare except).
Replace bare 'except:' with 'except Exception:' in two locations: - machine/registry.py: hash computation catches AttributeError or DoesNotExist when a machine config no longer exists - plugin/base/barcodes/mixins.py: has_barcode_generation property catches any error from calling generate(None) on a plugin Bare except catches all BaseException subclasses including SystemExit and KeyboardInterrupt which should never be silenced. This follows PEP 8 (E722: do not use bare except).
✅ Deploy Preview for inventree-web-pui-preview ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
SchrodingersGat
approved these changes
Jul 31, 2026
matmair
reviewed
Jul 31, 2026
Member
There was a problem hiding this comment.
What is the actual benefit of this? This seems to be coverage for coverage sake.
matmair
reviewed
Jul 31, 2026
Member
There was a problem hiding this comment.
Same as above; why are you checking if Django admin is working correctly in 20 different asserts? This seems like bad prompting imo and puts your competence into question
matmair
reviewed
Jul 31, 2026
| raise ValidationError(_('Invalid custom status key')) | ||
|
|
||
| if custom_status.logical_key is not self.instance.status: | ||
| if custom_status.logical_key != self.instance.status: |
Member
There was a problem hiding this comment.
Has this been verified? There is a difference between these comparison methods
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
This PR fixes multiple issues across the InvenTree backend:
Admin Search Improvements
Code Quality Fixes
is notidentity comparison (should be!=value comparison) for custom status validationsuper()method call (formfield_for_choice_field→formfield_for_dbfield)delete()method signature on EmailMessage (*kwargs→*args, **kwargs)except:clauses withexcept Exception:(PEP 8 E722)