5

我有一个模型 Person,它有时在该birth_date领域一无所有。这是一个例子:

(Pdb) dude = Person.objects.get(pk=20)
(Pdb) dude
<Person: Bob Mandene>
(Pdb) dude.birth_date
(Pdb) dude.birth_date == None
True

如何过滤这些有 的记录birth_date == None

我已经尝试了以下但没有成功:

1:“birth_date__isnull”不起作用。

 Person.objects.filter(birth_date__isnull = True) 
 # does not return the required 
 # object.    Returns a record that have birth_date set to 
 # NULL when the table was observed in MySQL.

以下不返回 id 为 20 的记录。

Person.objects.filter(birth_date = "")

如何过滤为无的字段?看起来 NULL 和 None 是不同的。当我使用 sequel pro(mysql 图形客户端)查看数据时,我看到“0000-00-00 00:00:00”,以下也不起作用

(Pdb) ab=Patient.objects.filter(birth_date = "0000-00-00 00:00:00")
 ValidationError: [u"'0000-00-00 00:00:00' value has the correct format 
 (YYYY-MM-DD     HH:MM[:ss[.uuuuuu]][TZ]) but it is an invalid date/time."]

模型

class Person(models.Model):
    person_no = models.IntegerField(primary_key=True)
    locationid = models.IntegerField(null=True, db_column='LocationID', blank=True) 
    address =  models.ForeignKey('Address', db_column = 'address_no')
    birth_date = models.DateTimeField(null=True, blank=True)
    class Meta:
       managed = False
       db_table = 'person'
4

3 回答 3

0

一些列表理解可以在这里派上用场:

persons = [person for person in Person.objects.all() if not person.birth_date]
于 2013-08-13T16:30:31.907 回答
0

mysql 中的 NULL 在 python 中变成了 None,所以使用birth_date__isnull=True 应该返回那些将birth_date 设置为 None 的。

于 2013-08-13T02:53:11.443 回答
0

嗯,我不确定为什么在这种情况下0000-00-00 00:00:00会被强制转换None,但您可以尝试使用exact

Person.objects.filter(birth_date__exact=None)
于 2013-08-13T14:06:23.290 回答