したがって、次のようなモデルがあります。
class Names(models.Model):
name = models.CharField()
class Entries(models.Model):
name = models.ForeignKey(Names)
date = models.DateField()
データはこんな感じ
name | date
name_1 | 2011-06-01
name_2 | 2011-03-01
name_3 | 2011-02-01
name_1 | 2010-06-01
name_2 | 2010-03-02
name_3 | 2010-02-01
name_4 | 2009-07-01
日付でエントリをクエリし、日付以下の各名前レコードを1 回取得したいと考えています。したがって、日付2011-06-01でクエリを実行すると、これが返されます。
name_1 | 2011-06-01
name_2 | 2011-03-01
name_3 | 2011-02-01
name_4 | 2009-07-01
私の仮定は、これがうまくいくということです:
date = datetime(year=2011, month=06, day=01)
results = Entries.objects.filter(date__lte=date).order_by('date').distinct('name')
しかし、私はそこに重複した名前のエントリを取得し続けます。
ヒントはありますか?
編集: ソリューションは Gareth Rees によって提供されました。少し修正する必要がありましたが、次のようになります。
sql = """myapp_entries.id = (SELECT E.id from myapp_entries AS E
WHERE E.name_id = myapp_names.id AND
'"""+date.strftime('%Y-%m-%d')+"""'
ORDER BY E.date DESC
LIMIT 1)'''
results = (Entries.objects
.extra(where = [sql])
.filter(date__lte = date)
.order_by('name', 'date'))