私は、エントリがmanytomanyフィールドで参照される別のテーブルで最も一致するテーブルから行を取得しようとしています。Djangoフィルタテーブルとカウント別にソート
働くSQLは次のようになります。私の見解で
class Event(models.Model):
title = models.CharField(max_length=250)
start_date = models.DateTimeField()
genres = models.ManyToManyField("genres.Genre", blank=True, null=True, related_name="events")
は、私が試してみました::
SELECT *, COUNT(*) FROM events_event_genres
LEFT JOIN events_event
ON event_id = events_event.id
WHERE genre_id IN (6,9,31)
AND start_date > '2016-08-06'
GROUP BY event_id
ORDER BY COUNT(*) DESC
LIMIT 10
イベントモデルを持っている私が取得しています
results = Event.objects.filter(
Q(genres__id__in=genres),
Q(start_date__gte=datetime.date.today()) \
.annotate(event=Count('id')) \
.order_by('event')
結果がほとんどですこのSQLクエリと同じ:
SELECT * FROM events_event
LEFT JOIN events_event_genres
ON events_event.id = event_id
WHERE genre_id IN (6,9,31)
AND start_date > '2016-08-06'
LIMIT 10
明らかにカウントが機能していません。
これを行うためのジャンゴの方法は何ですか?
あなたが望む結果何の平易な英語の説明を提供することができますか?あなたのSQLをリバースエンジニアリングしようとするのは簡単ではありません。 – solarissmoke
私は、ジャンルのリストと一致するすべてのイベントを取得しようとしているし、それぞれのイベントがどれくらいの一致があるかを数えます。私はジャンルの少なくとも1つにマッチするが、各イベントが持つマッチの量で順序付けられたすべてのイベントを返したい。 – James