Добавьте метку времени в логическое поле - PullRequest
0 голосов
/ 21 июня 2011

У меня есть видеообъект, который может показать администратор. Я хочу отсортировать эти видео по дате их появления.

Вот модели, которые у меня сейчас есть -

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 Ответ

1 голос
/ 21 июня 2011

В прошлом я использовал обнуляемое поле даты-времени в качестве логического значения.Когда оно равно нулю, вы знаете, что оно ложно, а когда у него есть дата, вы знаете, что оно истинно, а в качестве даты и времени для этого поля установлено значение True.

Это дешевый и простой способ получить два использования из одного поля.Вы также можете добавить несколько простых свойств в вашу модель, чтобы упростить использование шаблонов.Вот довольно быстрый пример.

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
...