2013-07-23 32 views
0

這並不是程序的bug修復問題。它看起來很傻,因爲我沒有太多設計網站的經驗。在開始編寫代碼之前,我想確保我的設計模式是正確的。如何設計內容共享模型在Django的社交網絡?

我要設計出像谷歌+或Facebook的社交網絡(僅完成這樣共享內容的基本功能),像谷歌+,用戶可以分享不同類型的像文字,圖片,鏈接和視頻內容。 如下圖所示: enter image description here

我很困惑我是否需要爲每種類型的共享內容設計不同的型號?如下面的代碼:

class TextPost(models.Models): 
    text=models.CharField(max_length=140) 
    createDate=models.DateTimeField(auto_now_add=True) 
    author=models.OneToOneField(User) 

class GalleryPost(models.Model): 
    galleryTitle=models.CharField(max_length=140) 
    createDate=models.DateTimeField(auto_now_add=True) 
    author=models.OneToOneField(User) 

class Images(models.Models): 
    image = models.ImageField() 
    galleryPost=models.ForeignKey(GalleryPost) 

class LinkPost(models.Models): 
    link=... 
    createDate=... 

class VideoPost(models.Models): 
    video=... 

或者把所有類型的一類:

class Post(models.Model): 
    text=models.CharField(max_length=140) 
    createDate=models.DateTimeField(auto_now_add=True) 
    author=models.OneToOneField(User) 
    galleryTitle=models.CharField(max_length=140) 
    link=... 
    video=... 

如果我選擇第一種方式,那是很容易被創建的日期在一個頁面中列出各種職位的? 或者還有其他更好的方法嗎?

回答

0

儘管兩種方法都是有效的方法,但第一種方法很難查詢。您可能想要顯示最新內容的混合Feed,因此最好輕鬆查詢數據庫。

在這種情況下,您希望所有模型都有一些基類,它定義了共享屬性(author,created_at)。然後爲特定的子類添加所需的額外屬性。查看docs.djangoproject.com Model Inheritance

class Post(models.Model): 
    author = models.ForeignKey('auth.user') 
    created_at = models.DateTimeField() 

class LinkPost(Post): 
    link = models.URLField() 

class ImagePost(Post): 
    image = models.ImageField() 
0

如果我做這個工作,我可能會選擇第一個設計;但是,我將創建一個分類模型這樣 類類別(models.Models): 類= models.CharField(MAX_LENGTH = 100)

類VideoPost(models.Models): 類= models.ForeignKey(類別) ......