2011-06-21 10 views
0

私はビデオオブジェクトを持っていますが、これは管理者が使用できます。私はそれらの特集したビデオを特集された日付で並べ替えることができるようにしたい。ここでブール値フィールドにタイムスタンプを追加

は、私が現在持っているモデルがある - 私の関連するビューのコードは次のようになります

class VideoMedia(models.Model): 
    uploaded_by = models.ForeignKey('UserProfile') 
    video = models.ImageField(upload_to='videos') 
    info = models.ForeignKey('VideoInfo', blank = True, null=True) 

class VideoInfo(models.Model): 
    title = models.CharField(max_length=256) 
    featured = models.BooleanField # need time also 
    ... 

-

video_set = VideoInfo.objects.all() 
    if sort == 'featured': 
     videos = video_set.filter(featured=1) # .order_by('timestamp') ? 

私は注目の分野にFKを追加しようとしたが、それはそれを作ります私はビュー/テンプレートで正しいデータを表示するのが非常に困難です。

class FeaturedVideos(models.Model): 
    video = models.ForeignKey(VideoMedia) 
    timestamp = models.DateTimeField(auto_now_add=True) 
# in view 
    if sort == 'featured': 
     videos = FeaturedVideos.objects.order_by('timestamp') 
     # this doesn't work, because I need to be relative to the VideoInfo model 
     # for the information to display correctly in the template 

このタスクを達成する最も簡単な方法は何でしょうか?ありがとうございました。

答えて

1

以前は、NULL値のdatetimefieldをブール値として使用していました。 nullの場合はfalseであることがわかり、日付がある場合はtrue、日付と時刻はTrueに設定されます。

これは、1つのフィールドから2つの用途を取得するための安価で簡単な方法です。また、テンプレートを使用するときに簡単に使用できるように、モデルに単純なプロパティを追加することもできます。ここにはかなり簡単な例があります。

class VideoInfo(models.Model): 
    title = models.CharField(max_length=256) 
    featured = models.DateTimeField(null=True, blank=True) 

    @property 
    def is_featured(self): 
     if self.featured: 
      return True 
     else: 
      return False 
+0

と同様に、features = models.DateTimeField(auto_now_add = True、null = True、blank = True) '? – David542

+1

私はauto_now_add = Trueを使用しません。それは行を追加するときに値を自動的に設定し、すべてのビデオを特色にします。私は上記のことをやるだろう。 null = True、およびblank = Trueの場合、フィーチャの値を渡さない限り、デフォルトはnullになります。 –

+0

@Ken、okありがとう、私はDB構造を取得し、それは正常に動作しています。ビューでは、どのように '非null'でフィルタリングするのですか?たとえば、if sort == 'featured':videos = video_set.filter(featured = NOT NULL).order_by( 'featured') '? – David542