我正在尝试做类似的事情:
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'”。
有什么方法可以让它发挥作用吗?请不要批评数据库设计,这只是一个例子。关键是如何获取/设置字段值。
答案 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