0

さて、私はブログ (百日草) で作業しており、モデルはエントリです。次のことを行う特別なクエリを作成したいと思います。

  1. 1 日あたり最大 1 つのエントリを選択します。
  2. エントリが「おすすめ」とマークされている場合は、そのエントリを選択します。
  3. それ以外の場合は最新のものを選択してください

簡略化されたモデル:

class EntryAbstractClass(models.Model):
    """Base Model design for publishing entries"""
    creation_date = models.DateTimeField(_('creation date'),
                                         default=timezone.now)
    start_publication = models.DateTimeField(_('start publication'),
                                             blank=True, null=True,
                                             help_text=_('date start publish'))
    end_publication = models.DateTimeField(_('end publication'),
                                           blank=True, null=True,
                                           help_text=_('date end publish'))
    featured = models.BooleanField(_('featured'), default=False)

さらに複雑なことに、「最新」に使用されるエントリの日付は次のとおりです。

if start_publication != None:
    latest_date = start_publication
else:
    latest_date = creation_date

SQLでこれを行う方法がわかりません。djangoフィルターはなおさらです。何か案は?

4

1 に答える 1

2

うーん、Q オブジェクトを使っているのでしょうか。100% 理解しているかどうかわかりません。これをチェックしてください: https://docs.djangoproject.com/en/dev/topics/db/queries/

このようなものはどうですか(完全にテストされていません):

from datetime import datetime
from django.db.models import Q

filters = Q()

# If an item is featured
filters |= Q(featured=True)

# or if it was "published" today
filters |= Q(start_publication__day=datetime.today())

# or if it was "created" today
filters |= Q(creation_date__day=datetime.today())

# grab just one
entry_of_the_day_yall = Entries.objects.filter(filters)[:1]
于 2013-03-27T02:08:38.717 に答える