Django / Python链和排序查询集

时间:2014-12-01 16:41:57

标签: python django

我的库存计数有N个位置,这个位置需要计算N次,所以我有一个模型用于“位置标题”,另一个模型用于每个标题的项目列表。

我需要链接,排序和获取N个查询集中项目的唯一结果

我有这个:

loc_id = request.POST['loc_id'] # the Id of my location pivot
inv_location = InventoryLocations.objects.get(pk=loc_id) # get the location count pivot
inv_locations = InventoryLocations.objects.filter(location=inv_location.location,
                inventory=inv_location.inventory) #get all related locations counts

# At this point i can have N inv_locations

count_items = [] # list of items in all inventory counts 
for l in inv_locations:
    items = InventoryDetails.objects.filter(inventory_location = l) # get items of every count 
    count_items.append(items)

# Now I have all the items counted in the counts_items array, I need to get from this a single
# list of items Ordered and not repeated    

all_items = chain(count_items) <<< IS THIS CORRECT??
sorted_items = sorted(all_items,key=lambda item: item.epc) << THIS GIVE ME ERROR
unique_items = ???

我的模特是:

class InventoryCount(models.Model):
    ...nothing important

class InventoryLocation(models.Model):
    inventory= models.ForeignKey(InventoryCount)
    location= models.ForeignKey(Location)
    ...

class InventoryDetails(models.Model):
    inventory_location= models.ForeignKey(InventoryLocations)
    epc = models.CharField(max_length=25, null=True, blank=True)
    item= models.ForeignKey(Item)
    ...

基本上,我需要一个按epc排序的数组中所有inventoryDe​​tails计算的所有项目的列表,而不是重复

我被困在这里,我不知道连锁店是否做得对,排序功能给我一个错误,说明该项目没有'epc'属性。

帮助PLZ!

1 个答案:

答案 0 :(得分:1)

解决您的直接问题 - 假设itertools.chainchain需要多次迭代。使用chain(*count_items)展开您的查询集列表。

但是使用InventoryDetails.objects.filter(inventory_location__in=inv_locations).order_by('epc').distinct()可以省去一些麻烦 - 在数据库中进行排序和统一,而不是在视图中进行排序。