Python 在Django中收集单独的模型
我有一个模型Python 在Django中收集单独的模型,python,django,django-models,django-templates,django-views,Python,Django,Django Models,Django Templates,Django Views,我有一个模型内容。此模型的对象应该是用户看到的唯一对象 但是对象必须处理图像、视频、文章等 我认为最好的解决方案是为每种类型的内容建立一个模型: class Image(models.Model): image = ImageField() class Article(models.Model): title = CharField(max_length=100) text = TextField() class Video(models.Model): ur
内容
。此模型的对象应该是用户看到的唯一对象
但是对象必须处理图像、视频、文章等
我认为最好的解决方案是为每种类型的内容建立一个模型:
class Image(models.Model):
image = ImageField()
class Article(models.Model):
title = CharField(max_length=100)
text = TextField()
class Video(models.Model):
url = URLField()
然后内容将通过以下方式进行控制
class Content(models.Model):
content = ForeignKey(to=?)
实际上一个Content
对象可以有多个图像、视频、文章等。因此我想我需要创建另一个模型ContentSet
,它可以有一个或多个图像、视频或文章
这样做的好处是,我可以在内容
对象中分类、发表评论等,而不是在所有模型图像
,文章
,视频
中处理这些内容
我需要一些关于如何做这件事的建议。这是一个好策略吗?使用generirelation
可能会更好吗?我的ForeignKey
在我的内容中应该指向什么型号
我希望我的想法清楚易懂。我不知道有哪个网站会这样做,所以我无法引用任何东西来更好地解释它。你也可以对这种关系进行建模
我开始使用django polymodels,因为它非常轻
您可以创建一个内容超类
class Content(PolymorphicModel):
pass
class Image(Content):
pass
class Article(Content):
pass
然后得到内容的所有子类
Content.objects.all()。选择子类()
我上面列出的文档链接几乎将您的确切问题作为一个用例,它有更好的示例和所有涉及的注意事项。我在一个大型网站的生产中使用它,它是非常简单的API,只要连接被理解
此外,它非常酷,因为您可以引用FK和M2M关系中的内容听起来像是和的工作。这会在图像
和内容
中创建相同的数据吗?在我看来,在继承自内容的模型中创建的所有数据都将在这些模型和内容中创建,这似乎有点多余。你怎么看?当你想创建一篇既包含图像又包含视频的帖子时,另一个问题出现了。没有内容
和图像
将没有相同的数据,它们将被关联,但是你为图像
指定的字段将只存储在你的图像
模型中。我认为你的第二点根本不是问题,它是PolymorhpicModel解决的问题之一。帖子可以使用一个字段引用内容
。如果你没有一个多元模型,你会如何将文章和内容联系起来?post会为每种内容类型设置m2m字段吗?图片、文章和视频?要获取与帖子相关的所有内容,查询看起来会是什么样的?使用多态性简化了这一点,也许这就是解决方案。如何在一篇文章中收集多幅图像?我是否必须创建一个模型Post
、一个基本模型内容
和我所有的孩子模型图像
、视频
等,并在内容
中创建一个外键
。当我想显示与Post
相关的所有不同内容对象时,我写Post.content\u set.all()
?是的,如果内容与帖子有一对多的关系,如果图像可以与多篇帖子相关联,则可以使用m2m字段。Post.content\u set.all()只检索内容
实例。要检索特定的内容类型,Image
Video
等,您可以调用post.content\u集。选择子类()
,或者您可以只获取postpost.content\u集的图像。选择子类(Image)