У меня есть следующие модели, которые представляют песни и пьесы каждой песни:
from django.db import models
class Play(models.Model):
play_day = models.PositiveIntegerField()
source = models.CharField(
'source',
choices=(('radio', 'Radio'),('streaming', 'Streaming'), )
)
song = models.ForeignKey(Song, verbose_name='song')
class Song(models.Model):
name = models.CharField('Name')
Изображение У меня есть следующие записи:
Песня:
|ID | name |
|---|---------------------|
| 1 | Stairway to Heaven |
| 2 | Riders on the Storm |
Воспроизведение:
|ID | play_day | source | song_id |
|---|----------|-----------|---------|
| 1 | 2081030 | radio | 1 |
| 1 | 2081030 | streaming | 1 |
| 2 | 2081030 | streaming | 2 |
Я бы хотел перечислить все треки следующим образом:
| Name | Day | Sources |
|---------------------|------------|------------------|
| Stairway to Heaven | 2018-10-30 | Radio, Streaming |
| Riders on the Storm | 2018-10-30 | Streaming |
Я использую Django==1.9.2
, django_tables2==1.1.6
и django-filter==0.13.0
с PostgreSQL.
Проблема:
Я использую Song в качестве модели таблицы и фильтра, поэтому набор запросов начинается с выбора FROM song
. Однако, когда я присоединяюсь к столу Play, я получаю две записи в случае «Лестницы на небеса» (я знаю, что даже одна - это слишком много: https://www.youtube.com/watch?v=RD1KqbDdmuE).
Что я пробовал:
Я попытался указать отличное для Песни, хотя это приводит к проблеме, которую я не могу отсортировать для других столбцов, кроме Song.id (предположим, что я различаю в этом столбце)
Aggregate: на самом деле это конечное состояние словаря, которое нельзя использовать с django_tables.
Я нашел это решение для PostgreSQL Выбор строк, упорядоченных по одному столбцу и отличных от другого , хотя я не знаю, как это сделать с django.
Вопрос:
Каков был бы правильный подход, чтобы показывать одну дорожку на строку, «агрегируя» информацию из ссылок, используя ORM Джанго?