diff --git a/src/backend/InvenTree/build/admin.py b/src/backend/InvenTree/build/admin.py index 9e5a349361..81c7b324ce 100644 --- a/src/backend/InvenTree/build/admin.py +++ b/src/backend/InvenTree/build/admin.py @@ -33,6 +33,13 @@ class BuildItemAdmin(admin.ModelAdmin): list_display = ('stock_item', 'quantity') + search_fields = [ + 'build_line__build__reference', + 'build_line__build__title', + 'stock_item__part__name', + 'stock_item__serial', + ] + autocomplete_fields = ['build_line', 'stock_item', 'install_into'] diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index 321b45a3c3..4d536d9335 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -3423,11 +3423,11 @@ class EmailMessage(models.Model): objects = NoDeleteManager() - def delete(self, *kwargs): + def delete(self, *args, **kwargs): """Delete entry - if not protected.""" if get_global_setting('INVENTREE_PROTECT_EMAIL_LOG'): raise ValidationError(del_error_msg) - return super().delete(*kwargs) + return super().delete(*args, **kwargs) class EmailThread(InvenTree.models.InvenTreeMetadataModel): diff --git a/src/backend/InvenTree/importer/admin.py b/src/backend/InvenTree/importer/admin.py index 45579ab44c..e5bf958000 100644 --- a/src/backend/InvenTree/importer/admin.py +++ b/src/backend/InvenTree/importer/admin.py @@ -27,7 +27,7 @@ class DataImportColumnMapAdmin(admin.TabularInline): session = queryset.first().session db_field.choices = [(col, col) for col in session.columns] - return super().formfield_for_choice_field(db_field, request, **kwargs) + return super().formfield_for_dbfield(db_field, request, **kwargs) @admin.register(importer.models.DataImportSession) diff --git a/src/backend/InvenTree/machine/admin.py b/src/backend/InvenTree/machine/admin.py index 929f913a5e..02533715c8 100755 --- a/src/backend/InvenTree/machine/admin.py +++ b/src/backend/InvenTree/machine/admin.py @@ -10,7 +10,7 @@ class MachineSettingInline(admin.TabularInline): model = models.MachineSetting - read_only_fields = ['key', 'config_type'] + readonly_fields = ['key', 'config_type'] def has_add_permission(self, request, obj): """The machine settings should not be meddled with manually.""" diff --git a/src/backend/InvenTree/machine/registry.py b/src/backend/InvenTree/machine/registry.py index f72e7c9dd4..3f90cbef23 100644 --- a/src/backend/InvenTree/machine/registry.py +++ b/src/backend/InvenTree/machine/registry.py @@ -432,7 +432,7 @@ class MachineRegistry( data.update(str(pk).encode()) try: data.update(str(machine.machine_config.active).encode()) - except: + except Exception: # machine does not exist anymore, hash will be different pass diff --git a/src/backend/InvenTree/order/admin.py b/src/backend/InvenTree/order/admin.py index 0a9d402878..1d06d7203e 100644 --- a/src/backend/InvenTree/order/admin.py +++ b/src/backend/InvenTree/order/admin.py @@ -149,6 +149,15 @@ class SalesOrderAllocationAdmin(admin.ModelAdmin): list_display = ('line', 'item', 'quantity') + search_fields = [ + 'line__order__reference', + 'line__order__customer__name', + 'line__part__name', + 'item__part__name', + 'item__part__IPN', + 'item__serial', + ] + autocomplete_fields = ('line', 'shipment', 'item') @@ -171,11 +180,19 @@ class ReturnOrderLineItemAdmin(admin.ModelAdmin): list_display = ['order', 'item', 'reference'] + search_fields = [ + 'order__reference', + 'order__customer__name', + 'item__part__name', + 'item__serial', + 'reference', + ] + autocomplete_fields = ['item', 'order'] @admin.register(models.ReturnOrderExtraLine) -class ReturnOrdeerExtraLineAdmin(GeneralExtraLineAdmin, admin.ModelAdmin): +class ReturnOrderExtraLineAdmin(GeneralExtraLineAdmin, admin.ModelAdmin): """Admin class for the ReturnOrderExtraLine model.""" diff --git a/src/backend/InvenTree/order/serializers.py b/src/backend/InvenTree/order/serializers.py index 027d2e994d..c7a9c944c4 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -191,7 +191,7 @@ class AbstractOrderSerializer( custom_status = get_logical_value( value, model=self.Meta.model._meta.model_name ) - except: + except Exception: raise ValidationError(_('Invalid custom status key')) if custom_status.logical_key is not self.instance.status: diff --git a/src/backend/InvenTree/order/tests.py b/src/backend/InvenTree/order/tests.py index 74f35a5c85..bd4adecb93 100644 --- a/src/backend/InvenTree/order/tests.py +++ b/src/backend/InvenTree/order/tests.py @@ -728,13 +728,3 @@ class OrderUpdatedAtTest(TestCase): before = self._refresh(instance).updated_at line.delete() self.assertGreaterEqual(self._refresh(instance).updated_at, before) - - def test_po_lineitem_admin_search(self): - """Test search fields for PurchaseOrderLineItemAdmin.""" - from order.admin import PurchaseOrderLineItemAdmin - - admin_class = PurchaseOrderLineItemAdmin - self.assertIn('part__part__name', admin_class.search_fields) - self.assertIn('part__SKU', admin_class.search_fields) - self.assertIn('order__reference', admin_class.search_fields) - self.assertIn('order__supplier__name', admin_class.search_fields) diff --git a/src/backend/InvenTree/part/admin.py b/src/backend/InvenTree/part/admin.py index d1e0398952..b6d3003a8f 100644 --- a/src/backend/InvenTree/part/admin.py +++ b/src/backend/InvenTree/part/admin.py @@ -38,6 +38,8 @@ class PartPricingAdmin(admin.ModelAdmin): list_display = ('part', 'overall_min', 'overall_max') + search_fields = ['part__name', 'part__IPN', 'part__description'] + autocomplete_fields = ['part'] @@ -47,6 +49,8 @@ class PartStocktakeAdmin(admin.ModelAdmin): list_display = ['part', 'date', 'quantity'] + search_fields = ['part__name', 'part__IPN'] + @admin.register(models.PartCategory) class PartCategoryAdmin(admin.ModelAdmin): @@ -63,6 +67,8 @@ class PartCategoryAdmin(admin.ModelAdmin): class PartRelatedAdmin(admin.ModelAdmin): """Class to manage PartRelated objects.""" + search_fields = ['part_1__name', 'part_2__name'] + autocomplete_fields = ('part_1', 'part_2') @@ -73,6 +79,8 @@ class PartTestTemplateAdmin(admin.ModelAdmin): list_display = ('part', 'test_name', 'required') readonly_fields = ['key'] + search_fields = ['part__name', 'test_name', 'description'] + autocomplete_fields = ('part',) diff --git a/src/backend/InvenTree/plugin/admin.py b/src/backend/InvenTree/plugin/admin.py index d764841607..7162f46df6 100644 --- a/src/backend/InvenTree/plugin/admin.py +++ b/src/backend/InvenTree/plugin/admin.py @@ -39,7 +39,7 @@ class PluginSettingInline(admin.TabularInline): model = models.PluginSetting - read_only_fields = ['key'] + readonly_fields = ['key'] def has_add_permission(self, request, obj): """The plugin settings should not be meddled with manually.""" @@ -51,7 +51,7 @@ class PluginUserSettingInline(admin.TabularInline): model = models.PluginUserSetting - read_only_fields = ['key'] + readonly_fields = ['key'] def has_add_permission(self, request, obj): """The plugin user settings should not be meddled with manually.""" diff --git a/src/backend/InvenTree/plugin/base/barcodes/mixins.py b/src/backend/InvenTree/plugin/base/barcodes/mixins.py index 298cbaeb39..1d9510b8c5 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/mixins.py +++ b/src/backend/InvenTree/plugin/base/barcodes/mixins.py @@ -64,7 +64,7 @@ class BarcodeMixin: except NotImplementedError: # If a NotImplementedError is raised, then barcode generation is not supported return False - except: + except Exception: pass return True diff --git a/src/backend/InvenTree/report/admin.py b/src/backend/InvenTree/report/admin.py index 771cbc1b2c..da1369b500 100644 --- a/src/backend/InvenTree/report/admin.py +++ b/src/backend/InvenTree/report/admin.py @@ -15,6 +15,8 @@ class ReportAdmin(admin.ModelAdmin): list_filter = ('model_type', 'enabled') + search_fields = ['name', 'description'] + def formfield_for_dbfield(self, db_field, request, **kwargs): """Provide custom choices for 'model_type' field.""" if db_field.name == 'model_type': @@ -29,9 +31,13 @@ class ReportSnippetAdmin(admin.ModelAdmin): list_display = ('id', 'snippet', 'description') + search_fields = ['description'] + @admin.register(ReportAsset) class ReportAssetAdmin(admin.ModelAdmin): """Admin class for the ReportAsset model.""" list_display = ('id', 'asset', 'description') + + search_fields = ['description'] diff --git a/src/backend/InvenTree/stock/admin.py b/src/backend/InvenTree/stock/admin.py index d72e844cb7..f5159d9d64 100644 --- a/src/backend/InvenTree/stock/admin.py +++ b/src/backend/InvenTree/stock/admin.py @@ -81,6 +81,8 @@ class StockTrackingAdmin(admin.ModelAdmin): list_display = ('item', 'date', 'label') + search_fields = ['item__part__name', 'item__serial', 'notes'] + autocomplete_fields = ['item'] def has_add_permission(self, request): @@ -102,4 +104,12 @@ class StockItemTestResultAdmin(admin.ModelAdmin): list_display = ('stock_item', 'test_name', 'result', 'value') + search_fields = [ + 'stock_item__part__name', + 'stock_item__serial', + 'template__test_name', + 'value', + 'notes', + ] + autocomplete_fields = ['stock_item']