在Django中,对__isnull的过滤似乎导致LIKE'None'

时间:2012-02-09 15:30:11

标签: django django-models

我有一个包含以下字段的模型

class Callstat(models.Model):
agentdisplayname = models.CharField(null=True, max_length=60, db_column='AgentDisplayName', blank=True)

class Meta:
    db_table = u'callstat'

def __unicode__(self):
    return u'%d: %s' % (self.callid, self.telnum)

但是,当我执行以下操作时,

call = Callstat.objects.all().filter(agentdisplayname__isnull=True)

MySQL的general_log将结果SQL显示为

SELECT `callstat`.`AgentDisplayName` FROM `callstat` WHERE `callstat`.`AgentDisplayName` LIKE 'None';

数据库中的数据是由一个单独的应用程序添加的,我无法控制它将字段保留为NULL这一事实。我很确定这个不能是Django中的一个错误,所以对我所做错的任何帮助都会非常感激。

编辑:好的结果我在我的代码中遗漏了一些东西,而且这个过滤器已被循环中的__exact过滤器覆盖了。

1 个答案:

答案 0 :(得分:2)

在列上设置null=True。默认情况下,null parameter将其设置为false,这意味着NULL不是允许的值。

agentdisplayname = models.CharField(null=True, max_length=60, db_column='AgentDisplayName', blank=True, null=True)

也可能需要更改现有的db列。