我希望做这样的事情:
u = User.objects.filter(name__isnull=True)[0]
name
的MySQL中默认值为None
。我也试过了:
u = User.objects.filter(name=None)[0]
这两个都没有返回任何东西,也就是IndexError: list index out of range
。如何获取未将值设置为名称的对象?
发布于 2015-12-27 23:15:17
尽管MySQL说默认值是None
,但Django使用"“作为默认值,所以我使用:
User.objects.filter(name="").first()
发布于 2015-12-27 23:23:49
您遗漏了一些关键概念。
IndexError: list index out of range
这个错误不是一个在数据库中查找的错误,这个错误是因为你试图用一个不存在的数组索引来做一些事情。
a = [1,2,3]
a[0] = 1
a[2] = 2
a[3] = 3
a[4] = IndexError: list index out of range
a[n] = IndexError: list index out of range
您可以正常执行以下操作:
u = User.objects.filter(name=None)
在数据库中,如果您设置了Null =真和空白=真(我不建议这样做),那么在模型中您可以有'name=None‘和’name=‘“’
问题是,您假设至少有一个用户与您的参数相同,因此您要添加来检索用户实例而不是查询集。
如果您希望仅检索且仅检索查询的一项,则必须使用.get (通常用于搜索pk,如果返回多个项,则会给出错误)
u = User.objects.get(name=None)
但是,如果您知道在中可以存在多个项(例如,名称而不是pk),并且您只关心第一次使用.first方法,然后再检查是否存在。
User.objects.filter(name="").first()
https://stackoverflow.com/questions/34484548
复制相似问题