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分<=現在の日時-postTime<=60分

現在のDateTimeをposttimeで引くと、結果は0分以上60分以下である必要があります。その条件がTRUEの場合は、2番目の条件に進みます。

2番目の条件: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 に答える