如何在显示字段时不显示它';Django没有

如何在显示字段时不显示它';Django没有,django,django-models,Django,Django Models,我有这个模型: class MsTune(models.Model): name = models.CharField(max_length=255) # title (source) start_page = models.CharField(max_length=20, blank=True, null=True, default=None) def __str__(self): if not self.start_page or self.start_pa

我有这个模型:

class MsTune(models.Model):
    name = models.CharField(max_length=255) # title (source)
    start_page = models.CharField(max_length=20, blank=True, null=True, default=None)

def __str__(self):
        if not self.start_page or self.start_page != '' or self.start_page is not None or self.start_page is not "None" or self.start_page is not null:
            return '%s, %s' % (self.name, self.start_page)
        else:
            return '%s' % (self.name)
如您所见,如果
start\u页面
为空,我只想要
name
,如果
start\u页面
为空,我只想要
name,start\u页面
。无论我设置了多少条件(见上文),我都会在模板中不断得到
name,而不是
。我错过了什么?另外,是否有一个较短的代码可以代替冗长的
if/else

编辑

这是数据库中“我的”字段的内容:

mysql> SELECT start_page from bassculture_mstune where id = 1942;
+------------+
| start_page |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)
在Django的壳中:

>>> mytune = MsTune.objects.get(id=1942)
>>> print(mytune.start_page)
None

由于您的字段中的默认值将是
,只需选中“不
值”
即可:

def __str__(self):
    returnVal = f"{self.name}"
    if self.start_page:
        returnVal = f"{returnVal}, {self.start_page}"
    return returnVal
或者,您可以使用ternery操作:

def __str__(self):
    return self.start_page and f"{self.name}, {self.start_page}" or f"{self.name}" 

Python三元运算:

Second answer on使用内置的默认\u if\u none过滤器。当使用正条件时,您会得到什么?如果self.start_页面:返回“%s,%s%”(self.name,self.start_页面)或者:返回“%s%”(self.name),事实上,显示视图和模板会更有启发性。视图是一个简单的
tunes=MsTune.objects.all()
,模板只是
{tunes%}{{tune}{endfor%}
。肯定条件向模板显示字符串“title,None”。我认为if语句不是您想要的。。。“或”是错误的逻辑。它应该是像。。。不是“无”和。。。不是“Null”。。。等等,没有,我还是一个也没有。此外,为什么是“和”?从我上面的代码可以看出,如果self.start页面不是None,我已经有了
条件。我的主要问题是,
None
仍然显示。@HBMCS Eddited,看一看。这也是我第一件事尝试的。我已经把它添加到了Looong的“如果”列表中。还是不走运。数据是如何写入MySQL数据库的?我已经从.sql转储导入了它。还有什么其他类型的null/None/'None?@HBMCS您可以试试:
打印(self.start\u页)
并检查输出内容。在模板和终端中/请参阅更新的问题。