Многомодельный RSS-канал в Django

Я пытаюсь понять, как иметь многомодельный RSS канал в Django. То есть, я хочу, чтобы Django обслуживал обновления двух различных моделей по одному RSS url.

Вот что у меня есть на данный момент

class ArticleFeed(Feed):
    title = "Articles"
    link = "/articles/"
    description = "RSS feed of Articles"
 
    def items(self):
        return Article.objects.filter(is_published=1)
 
    def item_title(self, item):
        return item.title
       
    def item_description(self, item):
        return item.get_description()
 
    def item_link(self, item):
        return item.get_absolute_url()

class VideoFeed(Feed):
    pass
 
class atomFeed(Feed):
    feed_type = Atom1Feed

В urls.py у меня есть следующий путь

path('rss/', ArticleFeed(), name="article_feed"),

Я хотел бы rss/ предоставить обновления для модели Статьи и Видео. Модель Video имеет аналогичные поля, но является невербатимной.

Вы можете использовать queryset3 = queryset1.union(queryset2) для объединения элементов двух разных моделей и использовать это в feed.items(self):

def items(self):
    query1 = Article1.objects.filter(is_published=1)
    query2 = Article2.objects.filter(is_published=1)

    query = query1.union(query2)

    # do any sorting AFTER union
    query_sorted = query.order_by('a_field', 'another_field')   

    self.item_count = query_sorted.count()
  
    return query_sorted

union() работает до тех пор, пока запросы имеют одинаковые поля.

примечание: выше представлен "псевдо" код - я не запускал его, поэтому в нем могут быть синтаксические ошибки

Вернуться на верх