擅长:python、mysql、java
<p>你的第二次尝试很接近,但有两个问题:</p>
<ol>
<li>既然您要从有序列表中删除<code>first</code>对象,那就是拥有最老的</em><code>release_date</code>的对象,而不是最近的</em></li>
<li>用<code>gt</code>代替<code>gte</code>似乎有点可疑。。。我很惊讶它在只有一个<code>ContentBuild</code>的时候还能捡到任何东西</li>
</ol>
<p>要在单个db查询中获得它,您有几个选项,具体取决于您的django版本。如果您使用django>;=2.0运行,您应该可以这样做(我现在没有一个项目可以测试它):</p>
<pre><code>from django.db.models import Max, Q, F
ContentBuildDeviceGroupLink.objects.annotate(
start_date=Max('release_date', filter=Q(release_date__lt=timezone.now())
).filter(release_date__gte=F('start_date'))
</code></pre>
<p>如果您使用的是django<;2.0,请尝试以下操作:</p>
<pre><code>from django.db.models import Subquery, F
recent_dates = ContentBuildDeviceGroupLink.objects.filter(
release_date__lte=timezone.now()
).order_by('-release_date').values('release_date')
ContentBuildDeviceGroupLink.objects.annotate(
start_time=Subquery(recent_dates[:1])
).filter(release_date__gte=F('start_time'))
</code></pre>
<p>也许有一个更聪明的方法,但似乎是可行的。你知道吗</p>