diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.po b/InvenTree/locale/zh/LC_MESSAGES/django.po
index 9b3bb67965..1ed93407e2 100644
--- a/InvenTree/locale/zh/LC_MESSAGES/django.po
+++ b/InvenTree/locale/zh/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inventree\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-06-22 01:09+0000\n"
-"PO-Revision-Date: 2021-06-22 01:23\n"
+"POT-Creation-Date: 2021-06-22 03:40+0000\n"
+"PO-Revision-Date: 2021-06-22 03:42\n"
 "Last-Translator: \n"
 "Language-Team: Chinese Simplified\n"
 "Language: zh_CN\n"
@@ -122,7 +122,7 @@ msgstr "注释"
 msgid "File comment"
 msgstr "文件注释"
 
-#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:2036
+#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:2020
 #: report/templates/report/inventree_test_report_base.html:91
 #: templates/js/stock.js:1174
 msgid "User"
@@ -133,7 +133,7 @@ msgid "upload date"
 msgstr "上传日期"
 
 #: InvenTree/models.py:107 InvenTree/models.py:108 company/models.py:396
-#: label/models.py:102 part/models.py:687 part/models.py:2177
+#: label/models.py:102 part/models.py:671 part/models.py:2161
 #: part/templates/part/params.html:27 report/models.py:180
 #: templates/InvenTree/search.html:137 templates/InvenTree/search.html:289
 #: templates/js/company.js:235 templates/js/part.js:118
@@ -148,7 +148,7 @@ msgstr "名称"
 #: company/templates/company/supplier_part_base.html:71
 #: company/templates/company/supplier_part_detail.html:31 label/models.py:109
 #: order/models.py:104 order/templates/order/purchase_order_detail.html:147
-#: part/models.py:711 part/templates/part/detail.html:54
+#: part/models.py:695 part/templates/part/detail.html:54
 #: part/templates/part/set_category.html:14 report/models.py:193
 #: report/models.py:530 report/models.py:569
 #: report/templates/report/inventree_build_order_base.html:118
@@ -474,7 +474,7 @@ msgstr ""
 #: order/templates/order/sales_order_detail.html:77
 #: order/templates/order/sales_order_detail.html:162
 #: order/templates/order/sales_order_detail.html:234 part/forms.py:342
-#: part/forms.py:372 part/forms.py:388 part/forms.py:404 part/models.py:2307
+#: part/forms.py:372 part/forms.py:388 part/forms.py:404 part/models.py:2291
 #: part/templates/part/internal_prices.html:98
 #: part/templates/part/order_prices.html:202
 #: part/templates/part/part_pricing.html:16
@@ -605,7 +605,7 @@ msgstr ""
 
 #: build/models.py:128 order/models.py:102 order/models.py:619
 #: order/templates/order/purchase_order_detail.html:174
-#: order/templates/order/sales_order_detail.html:229 part/models.py:2316
+#: order/templates/order/sales_order_detail.html:229 part/models.py:2300
 #: report/templates/report/inventree_po_report.html:92
 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
 #: templates/js/build.js:660 templates/js/build.js:1105
@@ -633,9 +633,9 @@ msgstr ""
 #: order/templates/order/purchase_order_detail.html:132
 #: order/templates/order/receive_parts.html:19
 #: order/templates/order/sales_order_detail.html:214 part/models.py:321
-#: part/models.py:1989 part/models.py:2001 part/models.py:2016
-#: part/models.py:2034 part/models.py:2109 part/models.py:2205
-#: part/models.py:2291 part/templates/part/part_app_base.html:8
+#: part/models.py:1973 part/models.py:1985 part/models.py:2000
+#: part/models.py:2018 part/models.py:2093 part/models.py:2189
+#: part/models.py:2275 part/templates/part/part_app_base.html:8
 #: part/templates/part/part_pricing.html:12 part/templates/part/related.html:29
 #: part/templates/part/set_category.html:13
 #: report/templates/report/inventree_build_order_base.html:110
@@ -711,7 +711,7 @@ msgstr ""
 msgid "Batch code for this build output"
 msgstr ""
 
-#: build/models.py:220 order/models.py:108 part/models.py:883
+#: build/models.py:220 order/models.py:108 part/models.py:867
 #: part/templates/part/detail.html:126 templates/js/order.js:293
 msgid "Creation Date"
 msgstr ""
@@ -739,7 +739,7 @@ msgstr ""
 #: build/models.py:251 build/templates/build/build_base.html:184
 #: build/templates/build/detail.html:105 order/models.py:122
 #: order/templates/order/order_base.html:138
-#: order/templates/order/sales_order_base.html:140 part/models.py:887
+#: order/templates/order/sales_order_base.html:140 part/models.py:871
 #: report/templates/report/inventree_build_order_base.html:159
 msgid "Responsible"
 msgstr ""
@@ -758,7 +758,7 @@ msgstr ""
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:258 part/models.py:745 stock/models.py:462
+#: build/models.py:258 part/models.py:729 stock/models.py:462
 msgid "Link to external URL"
 msgstr ""
 
@@ -771,7 +771,7 @@ msgstr ""
 #: order/templates/order/purchase_order_detail.html:243
 #: order/templates/order/sales_order_detail.html:309
 #: order/templates/order/so_navbar.html:33
-#: order/templates/order/so_navbar.html:36 part/models.py:872
+#: order/templates/order/so_navbar.html:36 part/models.py:856
 #: part/templates/part/navbar.html:142
 #: report/templates/report/inventree_build_order_base.html:173
 #: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377
@@ -1599,7 +1599,7 @@ msgstr ""
 msgid "Number of recent parts to display on index page"
 msgstr ""
 
-#: common/models.py:153 part/models.py:2207 part/templates/part/detail.html:160
+#: common/models.py:153 part/models.py:2191 part/templates/part/detail.html:160
 #: report/models.py:186 stock/forms.py:259 templates/js/table_filters.js:25
 #: templates/js/table_filters.js:315
 msgid "Template"
@@ -1609,7 +1609,7 @@ msgstr ""
 msgid "Parts are templates by default"
 msgstr ""
 
-#: common/models.py:160 part/models.py:835 part/templates/part/detail.html:170
+#: common/models.py:160 part/models.py:819 part/templates/part/detail.html:170
 #: templates/js/table_filters.js:128 templates/js/table_filters.js:327
 msgid "Assembly"
 msgstr ""
@@ -1618,7 +1618,7 @@ msgstr ""
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/models.py:167 part/models.py:841 part/templates/part/detail.html:180
+#: common/models.py:167 part/models.py:825 part/templates/part/detail.html:180
 #: templates/js/table_filters.js:331
 msgid "Component"
 msgstr ""
@@ -1627,7 +1627,7 @@ msgstr ""
 msgid "Parts can be used as sub-components by default"
 msgstr ""
 
-#: common/models.py:174 part/models.py:852 part/templates/part/detail.html:200
+#: common/models.py:174 part/models.py:836 part/templates/part/detail.html:200
 msgid "Purchaseable"
 msgstr ""
 
@@ -1635,7 +1635,7 @@ msgstr ""
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/models.py:181 part/models.py:857 part/templates/part/detail.html:210
+#: common/models.py:181 part/models.py:841 part/templates/part/detail.html:210
 #: templates/js/table_filters.js:339
 msgid "Salable"
 msgstr ""
@@ -1644,7 +1644,7 @@ msgstr ""
 msgid "Parts are salable by default"
 msgstr ""
 
-#: common/models.py:188 part/models.py:847 part/templates/part/detail.html:190
+#: common/models.py:188 part/models.py:831 part/templates/part/detail.html:190
 #: templates/js/table_filters.js:33 templates/js/table_filters.js:343
 msgid "Trackable"
 msgstr ""
@@ -1653,7 +1653,7 @@ msgstr ""
 msgid "Parts are trackable by default"
 msgstr ""
 
-#: common/models.py:195 part/models.py:867 part/templates/part/detail.html:150
+#: common/models.py:195 part/models.py:851 part/templates/part/detail.html:150
 #: templates/js/table_filters.js:29
 msgid "Virtual"
 msgstr ""
@@ -1973,7 +1973,7 @@ msgid "Point of contact"
 msgstr ""
 
 #: company/models.py:121 company/models.py:333 company/models.py:526
-#: order/models.py:106 part/models.py:744
+#: order/models.py:106 part/models.py:728
 #: report/templates/report/inventree_build_order_base.html:165
 #: templates/js/company.js:188 templates/js/company.js:419
 #: templates/js/part.js:498
@@ -1984,7 +1984,7 @@ msgstr ""
 msgid "Link to external company information"
 msgstr ""
 
-#: company/models.py:129 part/models.py:754
+#: company/models.py:129 part/models.py:738
 msgid "Image"
 msgstr ""
 
@@ -2062,7 +2062,7 @@ msgstr ""
 msgid "Parameter value"
 msgstr ""
 
-#: company/models.py:410 part/models.py:829 part/models.py:2179
+#: company/models.py:410 part/models.py:813 part/models.py:2163
 #: part/templates/part/detail.html:106 part/templates/part/params.html:29
 #: templates/js/company.js:247
 msgid "Units"
@@ -2111,17 +2111,17 @@ msgid "Supplier part description"
 msgstr ""
 
 #: company/models.py:538 company/templates/company/supplier_part_base.html:116
-#: company/templates/company/supplier_part_detail.html:38 part/models.py:2319
+#: company/templates/company/supplier_part_detail.html:38 part/models.py:2303
 #: report/templates/report/inventree_po_report.html:93
 #: report/templates/report/inventree_so_report.html:93
 msgid "Note"
 msgstr ""
 
-#: company/models.py:542 part/models.py:1620
+#: company/models.py:542 part/models.py:1604
 msgid "base cost"
 msgstr ""
 
-#: company/models.py:542 part/models.py:1620
+#: company/models.py:542 part/models.py:1604
 msgid "Minimum charge (e.g. stocking fee)"
 msgstr ""
 
@@ -2135,7 +2135,7 @@ msgstr ""
 msgid "Part packaging"
 msgstr ""
 
-#: company/models.py:546 part/models.py:1622
+#: company/models.py:546 part/models.py:1606
 msgid "multiple"
 msgstr ""
 
@@ -3630,7 +3630,7 @@ msgstr ""
 msgid "Updated {part} unit-price to {price} and quantity to {qty}"
 msgstr ""
 
-#: part/bom.py:138 part/models.py:72 part/models.py:763
+#: part/bom.py:138 part/models.py:72 part/models.py:747
 #: part/templates/part/category.html:66 part/templates/part/detail.html:90
 msgid "Default Location"
 msgstr ""
@@ -3708,7 +3708,7 @@ msgstr ""
 msgid "Include part supplier data in exported BOM"
 msgstr ""
 
-#: part/forms.py:122 part/models.py:2205
+#: part/forms.py:122 part/models.py:2189
 msgid "Parent Part"
 msgstr ""
 
@@ -3784,7 +3784,7 @@ msgstr ""
 msgid "Add parameter template to all categories"
 msgstr ""
 
-#: part/forms.py:344 part/models.py:2300
+#: part/forms.py:344 part/models.py:2284
 msgid "Sub part"
 msgstr ""
 
@@ -3804,7 +3804,7 @@ msgstr ""
 msgid "Default keywords for parts in this category"
 msgstr ""
 
-#: part/models.py:82 part/models.py:2251
+#: part/models.py:82 part/models.py:2235
 #: part/templates/part/part_app_base.html:10
 msgid "Part Category"
 msgstr ""
@@ -3815,355 +3815,351 @@ msgstr ""
 msgid "Part Categories"
 msgstr ""
 
-#: part/models.py:445 part/models.py:457
+#: part/models.py:448 part/models.py:460
 #, python-brace-format
 msgid "Part '{p1}' is  used in BOM for '{p2}' (recursive)"
 msgstr ""
 
-#: part/models.py:554
+#: part/models.py:557
 msgid "Next available serial numbers are"
 msgstr ""
 
-#: part/models.py:558
+#: part/models.py:561
 msgid "Next available serial number is"
 msgstr ""
 
-#: part/models.py:563
+#: part/models.py:566
 msgid "Most recent serial number is"
 msgstr ""
 
-#: part/models.py:642
+#: part/models.py:645
 msgid "Duplicate IPN not allowed in part settings"
 msgstr ""
 
-#: part/models.py:653
-msgid "Part must be unique for name, IPN and revision"
-msgstr ""
-
-#: part/models.py:686 part/templates/part/detail.html:22
+#: part/models.py:670 part/templates/part/detail.html:22
 msgid "Part name"
 msgstr ""
 
-#: part/models.py:693
+#: part/models.py:677
 msgid "Is Template"
 msgstr ""
 
-#: part/models.py:694
+#: part/models.py:678
 msgid "Is this part a template part?"
 msgstr ""
 
-#: part/models.py:705
+#: part/models.py:689
 msgid "Is this part a variant of another part?"
 msgstr ""
 
-#: part/models.py:706 part/templates/part/detail.html:60
+#: part/models.py:690 part/templates/part/detail.html:60
 msgid "Variant Of"
 msgstr ""
 
-#: part/models.py:712
+#: part/models.py:696
 msgid "Part description"
 msgstr ""
 
-#: part/models.py:717 part/templates/part/category.html:73
+#: part/models.py:701 part/templates/part/category.html:73
 #: part/templates/part/detail.html:67
 msgid "Keywords"
 msgstr ""
 
-#: part/models.py:718
+#: part/models.py:702
 msgid "Part keywords to improve visibility in search results"
 msgstr ""
 
-#: part/models.py:725 part/models.py:2250 part/templates/part/detail.html:73
+#: part/models.py:709 part/models.py:2234 part/templates/part/detail.html:73
 #: part/templates/part/set_category.html:15 templates/js/part.js:452
 msgid "Category"
 msgstr ""
 
-#: part/models.py:726
+#: part/models.py:710
 msgid "Part category"
 msgstr ""
 
-#: part/models.py:731 part/templates/part/detail.html:28
+#: part/models.py:715 part/templates/part/detail.html:28
 #: part/templates/part/part_base.html:87 templates/js/part.js:169
 #: templates/js/part.js:296
 msgid "IPN"
 msgstr ""
 
-#: part/models.py:732
+#: part/models.py:716
 msgid "Internal Part Number"
 msgstr ""
 
-#: part/models.py:738
+#: part/models.py:722
 msgid "Part revision or version number"
 msgstr ""
 
-#: part/models.py:739 part/templates/part/detail.html:35 report/models.py:199
+#: part/models.py:723 part/templates/part/detail.html:35 report/models.py:199
 #: templates/js/part.js:173
 msgid "Revision"
 msgstr ""
 
-#: part/models.py:761
+#: part/models.py:745
 msgid "Where is this item normally stored?"
 msgstr ""
 
-#: part/models.py:808 part/templates/part/detail.html:97
+#: part/models.py:792 part/templates/part/detail.html:97
 msgid "Default Supplier"
 msgstr ""
 
-#: part/models.py:809
+#: part/models.py:793
 msgid "Default supplier part"
 msgstr ""
 
-#: part/models.py:816
+#: part/models.py:800
 msgid "Default Expiry"
 msgstr ""
 
-#: part/models.py:817
+#: part/models.py:801
 msgid "Expiry time (in days) for stock items of this part"
 msgstr ""
 
-#: part/models.py:822 part/templates/part/detail.html:113
+#: part/models.py:806 part/templates/part/detail.html:113
 msgid "Minimum Stock"
 msgstr ""
 
-#: part/models.py:823
+#: part/models.py:807
 msgid "Minimum allowed stock level"
 msgstr ""
 
-#: part/models.py:830
+#: part/models.py:814
 msgid "Stock keeping units for this part"
 msgstr ""
 
-#: part/models.py:836
+#: part/models.py:820
 msgid "Can this part be built from other parts?"
 msgstr ""
 
-#: part/models.py:842
+#: part/models.py:826
 msgid "Can this part be used to build other parts?"
 msgstr ""
 
-#: part/models.py:848
+#: part/models.py:832
 msgid "Does this part have tracking for unique items?"
 msgstr ""
 
-#: part/models.py:853
+#: part/models.py:837
 msgid "Can this part be purchased from external suppliers?"
 msgstr ""
 
-#: part/models.py:858
+#: part/models.py:842
 msgid "Can this part be sold to customers?"
 msgstr ""
 
-#: part/models.py:862 part/templates/part/detail.html:227
+#: part/models.py:846 part/templates/part/detail.html:227
 #: templates/js/table_filters.js:21 templates/js/table_filters.js:65
 #: templates/js/table_filters.js:241 templates/js/table_filters.js:310
 msgid "Active"
 msgstr ""
 
-#: part/models.py:863
+#: part/models.py:847
 msgid "Is this part active?"
 msgstr ""
 
-#: part/models.py:868
+#: part/models.py:852
 msgid "Is this a virtual part, such as a software product or license?"
 msgstr ""
 
-#: part/models.py:873
+#: part/models.py:857
 msgid "Part notes - supports Markdown formatting"
 msgstr ""
 
-#: part/models.py:876
+#: part/models.py:860
 msgid "BOM checksum"
 msgstr ""
 
-#: part/models.py:876
+#: part/models.py:860
 msgid "Stored BOM checksum"
 msgstr ""
 
-#: part/models.py:879
+#: part/models.py:863
 msgid "BOM checked by"
 msgstr ""
 
-#: part/models.py:881
+#: part/models.py:865
 msgid "BOM checked date"
 msgstr ""
 
-#: part/models.py:885
+#: part/models.py:869
 msgid "Creation User"
 msgstr ""
 
-#: part/models.py:1622
+#: part/models.py:1606
 msgid "Sell multiple"
 msgstr ""
 
-#: part/models.py:2077
+#: part/models.py:2061
 msgid "Test templates can only be created for trackable parts"
 msgstr ""
 
-#: part/models.py:2094
+#: part/models.py:2078
 msgid "Test with this name already exists for this part"
 msgstr ""
 
-#: part/models.py:2114 templates/js/part.js:717 templates/js/stock.js:117
+#: part/models.py:2098 templates/js/part.js:717 templates/js/stock.js:117
 msgid "Test Name"
 msgstr ""
 
-#: part/models.py:2115
+#: part/models.py:2099
 msgid "Enter a name for the test"
 msgstr ""
 
-#: part/models.py:2120
+#: part/models.py:2104
 msgid "Test Description"
 msgstr ""
 
-#: part/models.py:2121
+#: part/models.py:2105
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:2126 templates/js/part.js:726
+#: part/models.py:2110 templates/js/part.js:726
 #: templates/js/table_filters.js:227
 msgid "Required"
 msgstr ""
 
-#: part/models.py:2127
+#: part/models.py:2111
 msgid "Is this test required to pass?"
 msgstr ""
 
-#: part/models.py:2132 templates/js/part.js:734
+#: part/models.py:2116 templates/js/part.js:734
 msgid "Requires Value"
 msgstr ""
 
-#: part/models.py:2133
+#: part/models.py:2117
 msgid "Does this test require a value when adding a test result?"
 msgstr ""
 
-#: part/models.py:2138 templates/js/part.js:741
+#: part/models.py:2122 templates/js/part.js:741
 msgid "Requires Attachment"
 msgstr ""
 
-#: part/models.py:2139
+#: part/models.py:2123
 msgid "Does this test require a file attachment when adding a test result?"
 msgstr ""
 
-#: part/models.py:2172
+#: part/models.py:2156
 msgid "Parameter template name must be unique"
 msgstr ""
 
-#: part/models.py:2177
+#: part/models.py:2161
 msgid "Parameter Name"
 msgstr ""
 
-#: part/models.py:2179
+#: part/models.py:2163
 msgid "Parameter Units"
 msgstr ""
 
-#: part/models.py:2207 part/models.py:2256 part/models.py:2257
+#: part/models.py:2191 part/models.py:2240 part/models.py:2241
 #: templates/InvenTree/settings/category.html:62
 msgid "Parameter Template"
 msgstr ""
 
-#: part/models.py:2209
+#: part/models.py:2193
 msgid "Data"
 msgstr ""
 
-#: part/models.py:2209
+#: part/models.py:2193
 msgid "Parameter Value"
 msgstr ""
 
-#: part/models.py:2261 templates/InvenTree/settings/category.html:67
+#: part/models.py:2245 templates/InvenTree/settings/category.html:67
 msgid "Default Value"
 msgstr ""
 
-#: part/models.py:2262
+#: part/models.py:2246
 msgid "Default Parameter Value"
 msgstr ""
 
-#: part/models.py:2292
+#: part/models.py:2276
 msgid "Select parent part"
 msgstr ""
 
-#: part/models.py:2301
+#: part/models.py:2285
 msgid "Select part to be used in BOM"
 msgstr ""
 
-#: part/models.py:2307
+#: part/models.py:2291
 msgid "BOM quantity for this BOM item"
 msgstr ""
 
-#: part/models.py:2309 templates/js/bom.js:216 templates/js/bom.js:285
+#: part/models.py:2293 templates/js/bom.js:216 templates/js/bom.js:285
 msgid "Optional"
 msgstr ""
 
-#: part/models.py:2309
+#: part/models.py:2293
 msgid "This BOM item is optional"
 msgstr ""
 
-#: part/models.py:2312
+#: part/models.py:2296
 msgid "Overage"
 msgstr ""
 
-#: part/models.py:2313
+#: part/models.py:2297
 msgid "Estimated build wastage quantity (absolute or percentage)"
 msgstr ""
 
-#: part/models.py:2316
+#: part/models.py:2300
 msgid "BOM item reference"
 msgstr ""
 
-#: part/models.py:2319
+#: part/models.py:2303
 msgid "BOM item notes"
 msgstr ""
 
-#: part/models.py:2321
+#: part/models.py:2305
 msgid "Checksum"
 msgstr ""
 
-#: part/models.py:2321
+#: part/models.py:2305
 msgid "BOM line checksum"
 msgstr ""
 
-#: part/models.py:2325 templates/js/bom.js:302 templates/js/bom.js:309
+#: part/models.py:2309 templates/js/bom.js:302 templates/js/bom.js:309
 #: templates/js/table_filters.js:51
 msgid "Inherited"
 msgstr ""
 
-#: part/models.py:2326
+#: part/models.py:2310
 msgid "This BOM item is inherited by BOMs for variant parts"
 msgstr ""
 
-#: part/models.py:2331 templates/js/bom.js:294
+#: part/models.py:2315 templates/js/bom.js:294
 msgid "Allow Variants"
 msgstr ""
 
-#: part/models.py:2332
+#: part/models.py:2316
 msgid "Stock items for variant parts can be used for this BOM item"
 msgstr ""
 
-#: part/models.py:2408 part/views.py:1690 part/views.py:1742
+#: part/models.py:2392 part/views.py:1690 part/views.py:1742
 #: stock/models.py:294
 msgid "Quantity must be integer value for trackable parts"
 msgstr ""
 
-#: part/models.py:2417 part/models.py:2419
+#: part/models.py:2401 part/models.py:2403
 msgid "Sub part must be specified"
 msgstr ""
 
-#: part/models.py:2422
+#: part/models.py:2406
 msgid "BOM Item"
 msgstr ""
 
-#: part/models.py:2539
+#: part/models.py:2523
 msgid "Part 1"
 msgstr ""
 
-#: part/models.py:2543
+#: part/models.py:2527
 msgid "Part 2"
 msgstr ""
 
-#: part/models.py:2543
+#: part/models.py:2527
 msgid "Select Related Part"
 msgstr ""
 
-#: part/models.py:2575
+#: part/models.py:2559
 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique"
 msgstr ""