代码之家  ›  专栏  ›  技术社区  ›  Robus

Django查询集索引

  •  2
  • Robus  · 技术社区  · 15 年前

    我想知道在模型上使用索引是否可行:

    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:'建筑物'对象是 不可索引的

    我之所以要这样做,是因为使用索引可以简化以下代码部分:

    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 回复  |  直到 15 年前
        1
  •  1
  •   Bernhard Vallant    15 年前

    这个 get() 方法不返回查询集,只返回模型类的单个实例/对象。如果要检索多个对象(=queryset),请使用 filter() 相反!

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

    我不知道你想用伐木工、市政厅等属性来做什么… 我想你可以做些类似的事情:

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

    但我不确定你想做什么,如果你使用的是姜戈的模型,他们被认为是被使用的方式…