Индексы наборов запросов Django - PullRequest
2 голосов
/ 08 августа 2010

Мне было интересно, возможно ли использование индексов для модели:

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' является неиндексированным"

Причина, по которой я хотел бы сделать что-то подобное, заключается в том, что использование индексов упростило бы такие части кода, как этот:

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 Ответ

1 голос
/ 08 августа 2010

Метод get() не возвращает набор запросов, только один экземпляр / объект класса модели.Если вы хотите получить более одного объекта (= набор запросов), используйте filter() вместо!

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...