如何在显示字段时不显示它';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页)
并检查输出内容。在模板和终端中/请参阅更新的问题。