2013-02-08 40 views

回答

0

這個名字說配發,它是一個可以連接到任何內容類型,即它可以有一個關係到任何模型的外鍵。一個很好的例子就是投票模型,你可以在多個不同的對象上投票,投票模型中的投票實例只會鏈接到你投票的模型。

class Article(models.Model): 
    ....... 

class Video(models.Model): 
    ...... 

class Like(models.Model): 
    user = models.ForeignKey(User) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    obj = generic.GenericForeignKey() 

說你有以上這些模型,用戶可以喜歡的文章和視頻,但你不想要的文章喜歡創造一個模型,因爲它在你的數據庫,這將創建不必要的表視頻分開喜歡可以是痛苦的,特別是如果你有可以被喜歡的模型的分配。爲了解決這個問題,您可以創建一個Like模型,它可以在一個模型中存儲您的網站的所有喜歡。因此,當用戶喜歡文章時,即使沒有明確的文章模型的外鍵,類似的實例也會與用戶和文章有關係,這可以通過將類似模型的內容類型設置爲內容來完成你喜歡的模型的類型,在這種情況下將是'文章'(不是你可以使用:ContentType.objects.get_for_model(Article)來獲取模型的內容類型),然後將文章的id分配給對象ID。

article = Article.objects.get(pk=1) 
article_ct = ContentType.objects.get_for_model(Article) 
user = User.objects.get(username='admin') 
Like.objects.create(user=user, content_type=article_ct, object_id=article.id) 
+0

你能告訴我一些代碼嗎? – chobo

+0

我編輯了答案 – Charl

相關問題