Coverage for src/backend/InvenTree/part/admin.py: 100%

45 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 17:47 +0000

1"""Admin class definitions for the 'part' app.""" 

2 

3from django.contrib import admin 

4 

5from part import models 

6 

7 

8@admin.register(models.Part) 

9class PartAdmin(admin.ModelAdmin): 

10 """Admin class for the Part model.""" 

11 

12 list_display = ('full_name', 'description', 'total_stock', 'category') 

13 

14 list_filter = ('active', 'assembly', 'is_template', 'virtual') 

15 

16 search_fields = ( 

17 'name', 

18 'description', 

19 'category__name', 

20 'category__description', 

21 'IPN', 

22 ) 

23 

24 autocomplete_fields = [ 

25 'variant_of', 

26 'category', 

27 'default_location', 

28 'bom_checked_by', 

29 'creation_user', 

30 ] 

31 

32 inlines = [] 

33 

34 

35@admin.register(models.PartPricing) 

36class PartPricingAdmin(admin.ModelAdmin): 

37 """Admin class for PartPricing model.""" 

38 

39 list_display = ('part', 'overall_min', 'overall_max') 

40 

41 autocomplete_fields = ['part'] 

42 

43 

44@admin.register(models.PartStocktake) 

45class PartStocktakeAdmin(admin.ModelAdmin): 

46 """Admin class for PartStocktake model.""" 

47 

48 list_display = ['part', 'date', 'quantity'] 

49 

50 

51@admin.register(models.PartCategory) 

52class PartCategoryAdmin(admin.ModelAdmin): 

53 """Admin class for the PartCategory model.""" 

54 

55 list_display = ('name', 'pathstring', 'description') 

56 

57 search_fields = ('name', 'description') 

58 

59 autocomplete_fields = ('parent', 'default_location') 

60 

61 

62@admin.register(models.PartRelated) 

63class PartRelatedAdmin(admin.ModelAdmin): 

64 """Class to manage PartRelated objects.""" 

65 

66 autocomplete_fields = ('part_1', 'part_2') 

67 

68 

69@admin.register(models.PartTestTemplate) 

70class PartTestTemplateAdmin(admin.ModelAdmin): 

71 """Admin class for the PartTestTemplate model.""" 

72 

73 list_display = ('part', 'test_name', 'required') 

74 readonly_fields = ['key'] 

75 

76 autocomplete_fields = ('part',) 

77 

78 

79@admin.register(models.BomItem) 

80class BomItemAdmin(admin.ModelAdmin): 

81 """Admin class for the BomItem model.""" 

82 

83 list_display = ('part', 'sub_part', 'quantity') 

84 

85 search_fields = ( 

86 'part__name', 

87 'part__description', 

88 'sub_part__name', 

89 'sub_part__description', 

90 ) 

91 

92 autocomplete_fields = ('part', 'sub_part') 

93 

94 

95@admin.register(models.PartSellPriceBreak) 

96class PartSellPriceBreakAdmin(admin.ModelAdmin): 

97 """Admin class for the PartSellPriceBreak model.""" 

98 

99 class Meta: 

100 """Metaclass options.""" 

101 

102 model = models.PartSellPriceBreak 

103 

104 list_display = ('part', 'quantity', 'price') 

105 

106 

107@admin.register(models.PartInternalPriceBreak) 

108class PartInternalPriceBreakAdmin(admin.ModelAdmin): 

109 """Admin class for the PartInternalPriceBreak model.""" 

110 

111 class Meta: 

112 """Metaclass options.""" 

113 

114 model = models.PartInternalPriceBreak 

115 

116 list_display = ('part', 'quantity', 'price') 

117 

118 autocomplete_fields = ('part',)