Django:如果将模型字段值放入任何数据结构中,如何获取/设置模型字段值?

时间:2012-05-15 19:52:43

标签: python django

我正在尝试做类似的事情:

class PollResults(models.Model):
    votes_0 = models.IntegerField( default=0 )
    votes_1 = models.IntegerField( default=0 )
    votes_2 = models.IntegerField( default=0 )
    votes_3 = models.IntegerField( default=0 )
    votes = [votes_0,votes_1,votes_2,votes_3]

    def add_vote(self,choice):
        self.votes[choice] = self.votes[choice]+1

但是,当我调用add_vote(0)时,我得到:“不支持+ +的操作数类型:'IntegerField'和'int'”

有什么方法可以让它发挥作用吗?请不要批评数据库设计,这只是一个例子。关键是如何获取/设置字段值。

1 个答案:

答案 0 :(得分:1)

它不起作用的原因是因为你在votes变量中引用了字段对象本身。您的代码与models.IntegerField(default=0) + 1执行的操作当然无效。

最简单的解决方案是简单地获取/设置新属性并让django魔术处理字段 - >价值转换。

def add_vote(self,choice):
    attname = 'votes_{0}'.format(choice) # get the attribute name
    value = getattr(self, attname) # get the value
    setattr(self, attname, value+1) # set the value

如果您想使用自己的votes字段来确定索引/字段,可以访问Field.attname以确定字段的属性名称。

def add_vote(self,choice):
    attname = self.votes[choice].attname
    value = getattr(self, attname) # get the value
    setattr(self, attname, value+1) # set the value