Django' bool'对象在模型保存时不可迭代

时间:2015-09-15 14:52:38

标签: python django

我试图更新我的模型,所以当通过admin检查BooleanField时,它会更新所有其他行以重置为False(0)。但是当我继续这样做时,它只返回以下TypeError:' bool'对象不可迭代

这是我的模特:

def transactions(account_id, start, finish)
  return @transactions if @transactions 
  response = get_call('/Accounts/Statements/' + account_id.to_s + '/' + start + '/' + finish)
  response = JSON.parse(response.body)
  @transactions = response.map {|txn| Transaction.new(txn)}
end

我尝试使用名为make_primary()的自定义方法在save()期间更新行。感觉就像我需要做的事情一样超级简单明了。我是Django的新手,所以它有点学习曲线。

非常感谢任何帮助和建议。

谢谢:)

编辑:

这里要求的是我的追溯/错误。此外,我更新了我的代码以使用排除而错误已更改为:' long'对象不可迭代

class Contact(models.Model):
    name            = models.CharField(max_length=255)
    telephone       = models.CharField(max_length=255,blank=True)
    email           = models.CharField(max_length=255,blank=True)
    primary_contact = models.BooleanField('Primary Contact')

    def __unicode__(self):
        return self.name

    def make_primary(self):
        Contact.objects.filter(id!=self.id).update(primary_contact=False)

    def save(self, *args, **kwargs):
        if (self.primary_contact == True):
            self.make_primary()
        super(Contact, self).save(*args, **kwargs)

1 个答案:

答案 0 :(得分:5)

此行无效:

MyModel.objects.filter(id!=self.id)

当您执行id!=self.id时,表达式的计算结果为False,因此它与执行filter(False)相同。这是不可迭代的bool对象'在您的追溯讯息中,它实际上与您的BooleanField无关。

执行filter(id=self.id)时,您将关键字参数传递给filter方法。 Django没有办法在过滤器中不等于关键字参数。您可以改为使用exclude()

MyModel.objects.exclude(id=self.id)