1

我正在尝试做这样的事情:

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) 时,我得到:"unsupported operand type(s) for +: 'IntegerField' and 'int'"

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

4

1 回答 1

2

它不起作用的原因是因为您在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
于 2012-05-15T20:14:06.287 回答