2010-08-08 104 views
2

我在想,如果在模型中使用的索引是可能的:Django的查询集指标

class Buildings(models.Model): 
    island = models.ForeignKey(Island) 
    townhall = models.IntegerField(default=1) 
    lumberjack = models.IntegerField(default=0) 
    stonequarry = models.IntegerField(default=0) 
    ironmine = models.IntegerField(default=0) 
    [...] 

a=Buildings.objects.get(somecondition) 
print a.townhall # 1 
a[1] +=1 
print a.townhall # 2 

目前,它抛出

"TypeError: 'Buildings' object is unindexable"

为什么我想这样做的原因是,使用索引将简化如下代码的部分:

if queue.kind_id == 0: buildings.townhall += 1 
elif queue.kind_id == 1: buildings.lumberjack += 1 
elif queue.kind_id == 2: buildings.stonequarry += 1 
elif queue.kind_id == 3: buildings.ironmine += 1 
elif queue.kind_id == 4: buildings.factory += 1 
elif queue.kind_id == 5: buildings.shipyard += 1 
elif queue.kind_id == 6: buildings.university += 1 

对此:

buildings[queue.kind_id] +=1 

回答

1

get()方法不返回查询集,只返回模型类的单个实例/对象。如果您想要检索多个对象(=查询集),请改用filter()

a=Buildings.objects.filter(...) 

我不知道你要使用的樵夫什么,市政厅等,为... 属性,我认为你可以这样做:

buildings_list = ['townhall', 'lumberjack', ....] 
attr = buildings_list[queue.kind_id] 
setattr(buildings, attr, getattr(buildings, attr) + 1) 

但我不知道你是什么正试图做,如果你正在使用django的模型,他们的方式是...

+0

呃我的错误:PI意味着通过索引引用单个对象中的值。使对象[0]引用object.townhall,object [1] - > object.lumberjack等 – Robus 2010-08-08 14:50:28