Как создать ленту новостей / временную шкалу, состоящую из различных типов содержимого?

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

class ContentType1(models.Model):
    pass


class ContentType2(models.Model):
    pass


class ContentType3(models.Model):
    pass


class Content(models.Model):
    c_type = models.CharField(
        max_length=6,
        choices=[
            ('TYPE1', 'Type 1 content'),
            ('TYPE2', 'Type 2 content'),
            ('TYPE3', 'Type 3 content')
        ]
    )

    type_1 = models.ForeignKey(ContentType1, null=True, blank=True)
    type_2 = models.ForeignKey(ContentType2, null=True, blank=True)
    type_3 = models.ForeignKey(ContentType3, null=True, blank=True)

Идея состоит в том, чтобы иметь общую модель Content, имеющую отдельные поля для каждого типа контента и поле с именем c_type, которое определяет тип контента и руководства для доступа к соответствующему полю. И отвечать на запросы пользователей из кверисета Content.

Я не полностью удовлетворен подходом, ищу лучший подход, возможно, что-то с полиморфизмом или любой лучший подход с использованием Django.

Думаю, вы можете использовать поле choices для выбора типа содержимого.

например:

class Content(models.MOdel):
CONTENT_TYPE=(
    ('type1','Type1'),
    ('type2','Type2'),
    ('type3','Type3'),
    )
#other fields

content_type=models.CharField(max_length=20,choices=CONTENT_TYPE,default='type1')
body = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)
Вернуться на верх