如何在Django中设计社交网络的内容共享模型?

时间:2013-07-23 07:53:24

标签: django django-models

这不是程序错误修复问题。它看起来很傻,因为我没有太多设计网站的经验。我想在开始编写代码之前确保我的设计模式是正确的。

我想设计一个像google +或facebook这样的社交网络(只完成共享内容等基本功能),像google +一样,用户可以分享不同类型的内容,如文字,照片,链接和视频。 如下图: 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=...

如果我选择第一种方式,是否很容易在一个页面中按创建日期列出所有类型的帖子? 或者还有其他更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果我做这项工作,我可以选择第一个设计;但我会创建一个像这样的类别模型 class Category(models.Models):     category = models.CharField(max_length = 100)

类VideoPost(models.Models):     category = models.ForeignKey(Category)     ......

答案 1 :(得分: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()