django 如何生成包含不同类型内容的新闻源/时间线?

taor4pac  于 2022-12-14  发布在  Go
关注(0)|答案(1)|浏览(109)

我必须为一个需要显示不同类型内容的应用程序实现一个新闻源。在将来,可能会出现一些新的内容类型。在我的脑海中,我有一个高层次的想法。目前,我不关心排名、缓存等问题。我的重点是生成具有不同类型内容的新闻源。

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的字段确定内容的类型和访问相应字段的指南,并从内容查询集响应用户的请求。
我对这种方法并不完全满意,正在寻找一种更好的方法,可能是多态性的方法,或者使用Django的任何更好的方法。

vh0rcniy

vh0rcniy1#

我认为您可以使用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)

相关问题