【发布时间】:2021-05-02 08:04:19
【问题描述】:
我有这个模型:
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_page 为空,我只需要name,如果start_page 已填充,我只需要name, start_page。无论我设置了多少条件(见上文),我都会在模板中不断收到name, None。我错过了什么?另外,我可以使用更短的代码来代替冗长的if / else 吗?
编辑
这是我在数据库中字段的内容:
mysql> SELECT start_page from bassculture_mstune where id = 1942;
+------------+
| start_page |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)
在 Django 的 shell 中:
>>> mytune = MsTune.objects.get(id=1942)
>>> print(mytune.start_page)
None
【问题讨论】:
-
stackoverflow.com/questions/6584235/… 的第二个答案使用内置的 default_if_none 过滤器。
-
当使用肯定条件时你会得到什么? if self.start_page: return '%s, %s' % (self.name, self.start_page) else: return '%s' % (self.name) 其实显示视图和模板会更有启发性。
-
视图是一个简单的
tunes = MsTune.objects.all(),模板只是{% for tune in tunes %} {{ tune }}{% endfor %}。正条件向模板显示字符串“title, None”。 -
我认为 if 语句不是你想要的......“或”是错误的逻辑。它应该类似于 ... is not "None" 并且 ... is not "Null" ... 等等。
-
不,我仍然没有。此外,为什么是“和”?它永远不会把所有这些东西放在一起。
标签: django django-models