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集。选择子类()
,或者您可以只获取post
post.content\u集的图像。选择子类(Image)