2014-11-04 60 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