我遇到了这个问题,但我不明白为什么它不起作用。我有这个模型:
class Tweet(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, on_delete=models.CASCADE)
content = models.TextField(validators=[validate_content])
updated = models.DateTimeField(auto_now=True)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.pk)
我在调用模型对象的地方有这个“for”:
...
{% for t in object_list %}
<tr>
<td>{{ t.user }}</td>
<td>{{ t.content }}</td>
{% if t.updated == t.timestamp %}
<td>Created: {{ t.updated| timesince }} </td>
{% else %}
<td>Updated: {{ t.updated| timesince }} </td>
{% endif %}
...
如果字段具有相同的内容,我想显示第一条消息,如果对象刚刚创建,这应该是真的,但它显示第二条消息。
我已经在管理面板中检查了字段的内容,两者的内容相同,所以我不知道会是什么。
最佳答案
auto_now=True
和 auto_now_add=True
各自使用 datetime.now()
获取时间戳,它们总是相差一小部分一秒钟,因为它们是单独执行的,所以您的 updated
和 timestamp
字段的值永远不会相等。
您可以使用 timesince
获取两个时间戳之间的时间差,如果它是 0 分钟
,它实际上可以被认为是新创建的:
{% if t.timestamp | timesince:t.updated == "0 minutes" %}
关于python - 我可以将 DateTimeFields 与标签 "if"进行比较吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52619472/