mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 03:56:43 +00:00
only one api call
This commit is contained in:
parent
948270bbcb
commit
596532f312
@ -246,38 +246,6 @@ class CategoryTree(generics.ListAPIView):
|
|||||||
queryset = PartCategory.objects.all()
|
queryset = PartCategory.objects.all()
|
||||||
serializer_class = part_serializers.CategoryTree
|
serializer_class = part_serializers.CategoryTree
|
||||||
|
|
||||||
def filter_queryset(self, queryset):
|
|
||||||
"""
|
|
||||||
"""
|
|
||||||
queryset = super().filter_queryset(queryset)
|
|
||||||
|
|
||||||
params = self.request.query_params
|
|
||||||
cat_id = params.get('id', None)
|
|
||||||
|
|
||||||
if cat_id in (None, '', '#', ):
|
|
||||||
filter_kwargs = {}
|
|
||||||
# get whole tree
|
|
||||||
if 'ref_type' in self.kwargs and 'ref' in self.kwargs:
|
|
||||||
if 'part' in self.kwargs['ref_type']:
|
|
||||||
filter_kwargs['parts__id'] = self.kwargs['ref']
|
|
||||||
elif 'category' in self.kwargs['ref_type']:
|
|
||||||
filter_kwargs['id'] = self.kwargs['ref']
|
|
||||||
else:
|
|
||||||
filter_kwargs['id'] = None
|
|
||||||
branch = queryset.model.objects.filter(**filter_kwargs).get_ancestors(include_self=True)
|
|
||||||
queryset = queryset.filter(parent=None) | branch
|
|
||||||
self.kwargs['ancestors'] = branch
|
|
||||||
else:
|
|
||||||
queryset = queryset.filter(parent_id=cat_id)
|
|
||||||
|
|
||||||
return queryset
|
|
||||||
|
|
||||||
def get_serializer_context(self):
|
|
||||||
context = super().get_serializer_context()
|
|
||||||
if 'ancestors' in self.kwargs:
|
|
||||||
context['ancestors'] = self.kwargs['ancestors']
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
class PartSalePriceList(generics.ListCreateAPIView):
|
class PartSalePriceList(generics.ListCreateAPIView):
|
||||||
"""
|
"""
|
||||||
@ -1555,7 +1523,6 @@ part_api_urls = [
|
|||||||
|
|
||||||
# Base URL for PartCategory API endpoints
|
# Base URL for PartCategory API endpoints
|
||||||
url(r'^category/', include([
|
url(r'^category/', include([
|
||||||
url(r'^tree/(?P<ref_type>[-\w]+)/(?P<ref>\d+)/', CategoryTree.as_view(), name='api-part-category-root-tree'),
|
|
||||||
url(r'^tree/', CategoryTree.as_view(), name='api-part-category-tree'),
|
url(r'^tree/', CategoryTree.as_view(), name='api-part-category-tree'),
|
||||||
url(r'^parameters/', CategoryParameterList.as_view(), name='api-part-category-parameter-list'),
|
url(r'^parameters/', CategoryParameterList.as_view(), name='api-part-category-parameter-list'),
|
||||||
|
|
||||||
|
@ -79,25 +79,27 @@ class CategoryTree(InvenTreeModelSerializer):
|
|||||||
|
|
||||||
parent = serializers.SerializerMethodField()
|
parent = serializers.SerializerMethodField()
|
||||||
|
|
||||||
children = serializers.SerializerMethodField()
|
|
||||||
|
|
||||||
a_attr = serializers.SerializerMethodField()
|
|
||||||
|
|
||||||
state = serializers.SerializerMethodField()
|
|
||||||
|
|
||||||
def get_parent(self, obj):
|
def get_parent(self, obj):
|
||||||
return obj.parent.pk if obj.parent else '#'
|
return obj.parent.pk if obj.parent else '#'
|
||||||
|
|
||||||
def get_children(self, obj):
|
# children = serializers.SerializerMethodField()
|
||||||
return True if obj.has_children else False
|
|
||||||
|
# def get_children(self, obj):
|
||||||
|
# return True if obj.has_children else False
|
||||||
|
|
||||||
|
a_attr = serializers.SerializerMethodField()
|
||||||
|
|
||||||
def get_a_attr(self, obj):
|
def get_a_attr(self, obj):
|
||||||
return {'href': obj.get_absolute_url()}
|
return {'href': obj.get_absolute_url()}
|
||||||
|
|
||||||
def get_state(self, obj):
|
# state = serializers.SerializerMethodField()
|
||||||
if 'ancestors' in self.context:
|
|
||||||
return {'opened': obj in self.context['ancestors'] }
|
# def get_state(self, obj):
|
||||||
return {}
|
# state = {}
|
||||||
|
# if 'ancestors' in self.context:
|
||||||
|
# state['opened'] = obj in self.context['ancestors'] or obj == self.context['root']
|
||||||
|
# state['selected'] = obj == self.context['active']
|
||||||
|
# return state
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PartCategory
|
model = PartCategory
|
||||||
@ -105,9 +107,9 @@ class CategoryTree(InvenTreeModelSerializer):
|
|||||||
'id',
|
'id',
|
||||||
'text',
|
'text',
|
||||||
'parent',
|
'parent',
|
||||||
'children',
|
#'children',
|
||||||
'a_attr',
|
'a_attr',
|
||||||
'state',
|
#'state',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -153,13 +153,7 @@ function enableSidetree(label) {
|
|||||||
$('#tree').jstree({
|
$('#tree').jstree({
|
||||||
'core': {
|
'core': {
|
||||||
'data': {
|
'data': {
|
||||||
'url': function(node) {
|
'url': '/api/part/category/tree/',
|
||||||
if (node.id == '#') {
|
|
||||||
var url_parts = String(window.location).split("/").slice(-3);
|
|
||||||
return `/api/part/category/tree/${url_parts[0]}/${url_parts[1]}/`;
|
|
||||||
}
|
|
||||||
return '/api/part/category/tree/'
|
|
||||||
},
|
|
||||||
'data': function(node) {
|
'data': function(node) {
|
||||||
return {'id': node.id};
|
return {'id': node.id};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user