список объектов из нескольких моделей в Django - PullRequest
0 голосов
/ 15 ноября 2009

У меня есть несколько абстрактных моделей, подобных этому

Class Article(models.Model):
    title = models.CharField()
    body = models.TextField()
    created_date = models.DateTimeField()
    author_name = models.CharField()

class Video(models.Model):
    title = models.CharField()
    body = models.TextField()
    created_date = models.DateTimeField()
    video_asset = models.CharField()

Теперь на конкретной странице я хотел бы объединить эти две модели в список на основе их созданной даты. Все известные мне модели будут иметь title и created_date, поэтому я могу сделать что-то вроде этого:

<ul>
{% for object in object_list %}
    <li>{{ object.title }} on {{ object.created_at }}</li>
{% endfor %}
</ul>

Я могу рассчитывать, что эти поля будут там без проблем.

Я думал о создании дополнительной модели и использовании общих внешних ключей. Вроде как агрегатная модель. затем каждый раз, когда создавался новый объект, я просто сигнализировал о создании одного из них, а затем просто извлекал из этой общей таблицы. Мне не очень нравится эта идея. Кажется очень избыточным.

Есть мысли?

обновление : я нашел эту запись Используя django, как я могу объединить два запроса из отдельных моделей в один запрос? но в моем случае это не будет работать, так как я использую класс абстрактной модели для них (я просто не показал это в примере, чтобы сделать его простым и понятным, насколько это возможно). Я смотрел на наследование, а не на абстракцию, но думал, что производительность, связанная с постоянными объединениями, принесет свои плоды. возможно нет

Ответы [ 2 ]

2 голосов
/ 15 ноября 2009

Просто закажите обе модели по created_date (или created_at, вы использовали обе) в своем представлении и объедините результаты в один список. Этот список может быть использован в вашем шаблоне. Нет необходимости в наследовании моделей или агрегированных моделях.

1 голос
/ 10 мая 2011

у вас есть опечатки ... Класс Article должен быть класс Article Исправить класс к классу (сделать его строчными)

...