早上好!
我嘗試了很多東西,但無法按喜歡和日期訂購我的帖子。例如,我希望有一個“熱門帖子”頁面,其中只包含今天的帖子,但按最喜歡的順序排列。
這是我的模型:
Class Post(models.Model):
name = models.CharField(max_length=40, default=None, null=False)
cover = models.CharField(max_length=100, default=None, null=True, blank=True)
content = models.TextField(max_length=2000, default=None, null=False)
class VoteDate(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
date = models.DateTimeField(default=timezone.now)
我最接近但沒有作業的是這條線:
hot_today = Post.objects.annotate(count=Count('votedate', filter=Q(votedate__date=datetime.today()))).order_by('count')[:30]
感謝您的幫助!
uj5u.com熱心網友回復:
這里有兩個問題:(1)您按物件的date欄位進行過濾VoteDate,即 a DateTime,因此過濾將無法正常作業,因為您將日期時間物件與日期時間進行比較,小時、分鐘和秒都設定為零; 和 (2) 你應該按降序排列,所以-count,而不是count:
from django.db.models import Q
from django.utils.timezone import now
hot_today = Post.objects.annotate(
count=Count('votedate', filter=Q(votedate__date__date=now().date()))
).order_by('-count')[:30]
您可能希望在date欄位上添加資料庫索引以提高效率,并在以下內容中進行過濾QuerySet:
class VoteDate(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
date = models.DateTimeField(auto_now_add=True, db_index=True)
我們可以過濾:
from django.db.models import Q
from django.utils.timezone import now
hot_today = Post.objects.filter(
votedate__date__date=now().date()
).annotate(
count=Count('votedate')
).order_by('-count')[:30]
這不會顯示Post當天沒有投票的 s,但這可能不是問題。通過過濾,它會有效地將查詢時間減少到只VoteDate設定到今天。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/364510.html
上一篇:Mongodb:獲取頂級檔案
