在Django中测试空字符串/null字符串

16 投票
4 回答
31331 浏览
提问于 2025-04-16 23:11

我有一个字符字段,内容如下:

myString = models.CharField(max_length=50,null=True,blank=True)

在我的很多对象中,通过django管理界面创建时,这个特定的字符串经常是空的。在MySQL中,这个列是VARCHAR(50),默认值是NULL。

我在views.py中尝试的任何测试来检测空值,似乎总是评估为假,无论这个条目是否为空:

myString is None
myString==""
len(myString)==0

我该如何区分这个字段是空的和非空的值呢?

谢谢

编辑:

实际的视图如下,我想只有在这个字段不为空时才执行一个代码块。

if myObject.myString:
     #do something

这个代码块总是会执行,我已经尝试了所有上述测试空字段的例子。

编辑2:

算了,if myObject.myString: 确实有效。

4 个回答

3

myString 其实不是一个字符串,它是一个 models.CharField。请给我们看看你实际的视图代码,看看你是怎么尝试做这件事的。

如果你已经有了模型的一个实例,你应该可以直接这样做

if model_instance.myString:

来检查它是否不为空。

13

有些空字段返回的是空字符串,而有些则返回的是None。不过,一个可以为空的布尔字段如果被设置了,会返回False。这样的话,就不能通过Srikar的答案中的测试了。一个更可靠的解决方案是:

if d in [None, '']:
    # This field is empty.
19

如果你的 dNone(表示没有值)或者是空字符串 "",那么只需要检查一下 -

if d: 
    #do something
else:
    #do something else

撰写回答