0

我正在尝试使用一种算法创建一个“热门页面”,该算法可以使用所有用户的照片帖子填充我的 django 视图。我有一个 Photo_Poster & Photo 模型:

class Photo_Poster(models.Model)
     user = models.OneToOneField(User, primary_key=True
     favorites = models.ManyToManyField('Photo', through='Favorites', related_name 'photo_poster_favs')
     likes = models.ManyToManyField('Photo', related_name='likedby', blank=True)

     def __unicode__(self):
          return self.user.username



class Photo(models.Model)
     title = models.CharField(max_length=40)
     photo_poster = models.ForeignKey(Photo_Poster, related_name = 'shot_owner')
     postTime = models.DateTimeField(auto_now_add=True)


     def __unicode__(self):
          return self.title

制作热门页面的条件如下:

第一个条件:0 分钟 <= CURRENT DATETIME - postTime <= 60 分钟

当当前 DateTime 减去 post 时间时,结果必须等于或大于 0 分钟且小于或等于 60 分钟。如果该条件为 TRUE,则转到第二个条件。

第二个条件:0.10 <= 点赞数/收藏数 <= 1

如果“喜欢的数量”除以“收藏的数量”等于或大于 0.10 且小于或等于 1,则条件成立,照片将进入热门页面。

怎么可能做到这一点?关于任何人如何能够承担这样的壮举的任何想法?感谢所有答案和评论,我相信您的答案对其他人非常有用。先感谢您。

4

1 回答 1

1

好吧,你可以使用 django F() 表达式,

from django.db.models import F
import datetime
now = datetime.datetime.now()
Photo.objects.filter(postTime__lte=now, 
                     postTime__gte=now - datetime.timedelta(minutes=60),
                     photo_poster__likes__gte=F(photo_poster__favorites) * 0.10,
                     photo_poster__likes__lte=F(photo_poster__favorites) * 1)
于 2013-01-05T05:26:00.217 回答