AC-1040 Fix inventory tree view.

This commit is contained in:
Chris Church 2014-03-25 14:20:37 -04:00
parent 6504a8ae40
commit 42e9451742
4 changed files with 11 additions and 5 deletions

View File

@ -72,7 +72,7 @@ SUMMARIZABLE_FK_FIELDS = {
'last_job_host_summary': DEFAULT_SUMMARY_FIELDS + ('failed',),
'last_update': DEFAULT_SUMMARY_FIELDS + ('status', 'failed', 'license_error'),
'current_update': DEFAULT_SUMMARY_FIELDS + ('status', 'failed', 'license_error'),
'inventory_source': ('source', 'last_updated', 'status'),
#'inventory_source': ('source', 'last_updated', 'status'),
}
class ChoiceField(fields.ChoiceField):
@ -654,7 +654,8 @@ class GroupTreeSerializer(GroupSerializer):
if obj is None:
return {}
children_qs = obj.children.filter(active=True)
children_qs = children_qs.select_related('inventory', 'inventory_source')
children_qs = children_qs.select_related('inventory')
children_qs = children_qs.prefetch_related('inventory_source')
return GroupTreeSerializer(children_qs, many=True).data

View File

@ -1152,7 +1152,8 @@ class InventoryTreeView(RetrieveAPIView):
def retrieve(self, request, *args, **kwargs):
inventory = self.get_object()
groups_qs = inventory.root_groups.filter(active=True)
groups_qs = groups_qs.select_related('inventory', 'inventory_source')
groups_qs = groups_qs.select_related('inventory')
groups_qs = groups_qs.prefetch_related('inventory_source')
data = GroupTreeSerializer(groups_qs, many=True).data
return Response(data)

View File

@ -396,8 +396,8 @@ class GroupAccess(BaseAccess):
def get_queryset(self):
qs = self.model.objects.filter(active=True).distinct()
qs = qs.select_related('created_by', 'inventory')#, 'inventory_source')
qs = qs.prefetch_related('parents', 'children')
qs = qs.select_related('created_by', 'inventory')
qs = qs.prefetch_related('parents', 'children', 'inventory_source')
inventories_qs = self.user.get_queryset(Inventory)
return qs.filter(inventory__in=inventories_qs)

View File

@ -807,11 +807,15 @@ class InventoryTest(BaseTest):
def test_get_inventory_tree_view(self):
# Group A is parent of B, B is parent of C, C is parent of D.
g_a = self.inventory_a.groups.create(name='A')
g_a.inventory_source
g_b = self.inventory_a.groups.create(name='B')
g_b.inventory_source
g_b.parents.add(g_a)
g_c = self.inventory_a.groups.create(name='C')
g_c.inventory_source
g_c.parents.add(g_b)
g_d = self.inventory_a.groups.create(name='D')
g_d.inventory_source
g_d.parents.add(g_c)
url = reverse('api:inventory_tree_view', args=(self.inventory_a.pk,))