mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Create a custom Manager class for the Part model
- Always perform prefetch_related calls
This commit is contained in:
parent
d9673244d5
commit
84fc2785d6
@ -284,6 +284,23 @@ def match_part_names(match, threshold=80, reverse=True, compare_length=False):
|
|||||||
return matches
|
return matches
|
||||||
|
|
||||||
|
|
||||||
|
class PartManager(models.Manager):
|
||||||
|
"""
|
||||||
|
Defines a custom object manager for the Part model.
|
||||||
|
|
||||||
|
The main purpose of this manager is to reduce the number of database hits,
|
||||||
|
as the Part model has a large number of ForeignKey fields!
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
|
||||||
|
return super().get_queryset().prefetch_related(
|
||||||
|
'category',
|
||||||
|
'stock_items',
|
||||||
|
'builds',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@cleanup.ignore
|
@cleanup.ignore
|
||||||
class Part(MPTTModel):
|
class Part(MPTTModel):
|
||||||
""" The Part object represents an abstract part, the 'concept' of an actual entity.
|
""" The Part object represents an abstract part, the 'concept' of an actual entity.
|
||||||
@ -321,6 +338,8 @@ class Part(MPTTModel):
|
|||||||
responsible: User who is responsible for this part (optional)
|
responsible: User who is responsible for this part (optional)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
objects = PartManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _("Part")
|
verbose_name = _("Part")
|
||||||
verbose_name_plural = _("Parts")
|
verbose_name_plural = _("Parts")
|
||||||
|
@ -215,25 +215,6 @@ class PartSerializer(InvenTreeModelSerializer):
|
|||||||
if category_detail is not True:
|
if category_detail is not True:
|
||||||
self.fields.pop('category_detail')
|
self.fields.pop('category_detail')
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def prefetch_queryset(queryset):
|
|
||||||
"""
|
|
||||||
Prefetch related database tables,
|
|
||||||
to reduce database hits.
|
|
||||||
"""
|
|
||||||
|
|
||||||
return queryset.prefetch_related(
|
|
||||||
'category',
|
|
||||||
'category__parts',
|
|
||||||
'category__parent',
|
|
||||||
'stock_items',
|
|
||||||
'bom_items',
|
|
||||||
'builds',
|
|
||||||
'supplier_parts',
|
|
||||||
'supplier_parts__purchase_order_line_items',
|
|
||||||
'supplier_parts__purchase_order_line_items__order',
|
|
||||||
)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def annotate_queryset(queryset):
|
def annotate_queryset(queryset):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user