2014-11-04 64 views
1

我有一个模型Content。这个模型的对象应该是用户看到的唯一对象。在Django中收集单独的模型

但对象必须处理图像,视频,文章等

我认为最好的解决办法是对每种类型的内容模型:

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对象可以有超过1幅图像,视频,文章等,所以我想我需要创建一个其他型号为ContentSet,可能有1个或多个图像,视频或文章。

的优势,将是我可以归类,必须在Content对象意见等,而不是在所有的车型ImageArticleVideo处理这个。

我需要一些关于如何做到这一点的建议。这是一个好策略吗?使用GenericRelation可能会更好吗?我的ForeignKey应指向Content模型中的哪个模型?

我希望我的想法清楚明白。我不知道任何网站这样做,所以我不能提及任何解释它的更好。

+0

听起来像是为[CONTENTTYPES框架]工作(https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes /)和[通用关系](https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#generic-relations)。 – Ngenator 2014-11-04 22:59:50

回答

1

你也可以模拟这种关系polymorphicaly

我开始使用Django的polymodels becasue它非常轻巧

https://github.com/charettes/django-polymodels

您可以创建一个内容超

class Content(PolymorphicModel): 
    pass  

class Image(Content): 
    pass 

class Article(Content): 
    pass 

和然后获得内容的所有子类

Content.objects.all().select_subclasses()

我上面列出的文档链接非常使用您的确切问题作为用例,它有更好的示例和所涉及的所有注意事项。我在一个大型网站的生产环境中使用它,它是非常简单的API,只要连接被理解为高性能。

此外,这是非常酷,因为你可以参考FK和M2M关系内容

+0

这会在'Image'和'Content'中创建相同的数据吗?对我来说,从模型中创建的所有数据都会在这些模型和Content中创建,这似乎有点多余。你怎么看待这件事? – Jamgreen 2014-11-05 10:07:16

+0

当想要创建一个包含图像和视频的帖子时,就会出现另一个问题。 – Jamgreen 2014-11-05 11:40:28

+0

否'Content'和'Image'不会有相同的数据,它们将会关联,但是您为'Image'指定的字段将只存储在您的'Image'模型中。我认为你的第二点根本不是问题,这是PolymorhpicModel解决的问题之一。一篇文章可以使用一个字段来引用“内容”。如果你没有polymorhpic模型,你会如何关联帖子和内容? post会为每个'Content'类型有一个m2m字段吗?图像,文章和视频?查询看起来像是为了获得与帖子相关的所有内容?使用多态可简化 – dm03514 2014-11-05 14:13:12