2010-08-08 2 views
2

мне было интересно, если с помощью индексов на модели было возможно:Джанго querysets индексы

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(...) 

Я не уверен, что вы пытаетесь использовать лесоруб, Townhall и т.д. атрибуты ... Я думаю, что вы могли бы сделать что-то вроде:

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

Но я не уверен, что ты пытаются использовать, и если вы используете модели django в том виде, в каком они предназначены для использования ...

+0

Uh моя ошибка: PI означало ссылку на значения в одном объекте через индексы. как сделать объект [0] ссылка object.townhall, object [1] -> object.lumberjack ETC – Robus

Смежные вопросы