mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Reduce some database queries by using aggregate Sum
This commit is contained in:
parent
dd5de91c23
commit
ee2ddbf512
@ -16,6 +16,7 @@ from django.conf import settings
|
|||||||
|
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.db import models, transaction
|
from django.db import models, transaction
|
||||||
|
from django.db.models import Sum
|
||||||
from django.core.validators import MinValueValidator
|
from django.core.validators import MinValueValidator
|
||||||
|
|
||||||
from django.contrib.staticfiles.templatetags.staticfiles import static
|
from django.contrib.staticfiles.templatetags.staticfiles import static
|
||||||
@ -481,7 +482,13 @@ class Part(models.Model):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def stock_entries(self):
|
def stock_entries(self):
|
||||||
return [loc for loc in self.locations.all() if loc.in_stock]
|
""" Return all 'in stock' items. To be in stock:
|
||||||
|
|
||||||
|
- customer is None
|
||||||
|
- belongs_to is None
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self.stock_items.filter(customer=None, belongs_to=None)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def total_stock(self):
|
def total_stock(self):
|
||||||
@ -489,7 +496,12 @@ class Part(models.Model):
|
|||||||
Part may be stored in multiple locations
|
Part may be stored in multiple locations
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return sum([loc.quantity for loc in self.stock_entries])
|
total = self.stock_entries.aggregate(total=Sum('quantity'))['total']
|
||||||
|
|
||||||
|
if total:
|
||||||
|
return total
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def has_bom(self):
|
def has_bom(self):
|
||||||
@ -518,7 +530,7 @@ class Part(models.Model):
|
|||||||
returns a string representation of a hash object which can be compared with a stored value
|
returns a string representation of a hash object which can be compared with a stored value
|
||||||
"""
|
"""
|
||||||
|
|
||||||
hash = hashlib.md5('bom seed'.encode())
|
hash = hashlib.md5(str(item.part.id).encode())
|
||||||
|
|
||||||
for item in self.bom_items.all():
|
for item in self.bom_items.all():
|
||||||
hash.update(str(item.sub_part.id).encode())
|
hash.update(str(item.sub_part.id).encode())
|
||||||
|
@ -61,7 +61,7 @@ class PartSerializer(serializers.ModelSerializer):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def setup_eager_loading(queryset):
|
def setup_eager_loading(queryset):
|
||||||
queryset = queryset.prefetch_related('category')
|
queryset = queryset.prefetch_related('category')
|
||||||
queryset = queryset.prefetch_related('locations')
|
queryset = queryset.prefetch_related('stock_items')
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
Loading…
Reference in New Issue
Block a user