Как создать ленту новостей / временную шкалу, состоящую из различных типов содержимого?
Мне нужно реализовать ленту новостей для приложения, где необходимо показывать разные типы контента. И в будущем могут появиться новые типы контента. У меня в голове на высоком уровне есть следующая идея. В данный момент меня не волнует ранжирование, кэширование и т.д. Мое внимание сосредоточено на генерации новостных лент с различными типами контента.
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)