擅长:python、mysql、java
<h2>使用@属性</h2>
<p>这里最简单的事情就是根本没有is expired字段!不需要。你需要的是房产。在</p>
<pre><code>class BillboardTracker(models.Model):
client_name = models.CharField(max_length=400)
entry_date = models.DateTimeField(default=datetime.now)
duration = models.PositiveIntegerField()
expiry_date = models.DateField()
@property
def is_expired(self):
if datetime.now > self.expiry_date:
return True
return False
</code></pre>
<p>请记住,数据库中没有字段,如果该字段与另一个具有简单计算的字段相同。这会自动消除你的头痛,因为你必须将项目标记为过期。在</p>
<p>如果你想知道一个对象是否已经过期。在</p>
^{pr2}$
<h2>过滤</h2>
<p>如果您想检索一组过期的对象</p>
<pre><code>BillboardTracker.objects.filter(expiry_date__le=datetime.now())
</code></pre>
<p>这就是为什么我提到你不需要存储一个容易计算的字段。在</p>
<h2>指数优势</h2>
<p>在大多数RDBMS中,布尔字段(例如您的is_expired列)不能有效地索引。所以这实际上意味着,如果您在expiry\u date字段上创建索引,那么上面的查询将比对布尔字段的查询快。在</p>