0

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

我想设计一个像google+或facebook这样的社交网络(只完成分享内容等基本功能),像google+一样,用户可以分享不同类型的内容,如文字、照片、链接和视频。如下图: 在此处输入图像描述

我很困惑我是否需要为每种类型的共享内容设计不同的模型?像下面的代码:

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=...

如果我选择第一种方式,那么在一个页面中按创建日期列出各种帖子是否容易?或者有没有其他更好的方法?

4

2 回答 2

0

虽然这两种方法都是有效的方法,但第一种方法很难查询。您可能希望显示最新内容的混合提要,因此最好易于查询数据库。

在这种情况下,您会希望所有模型都有一些基类,它定义了共享属性(作者、created_at)。然后对于特定的子类,添加所需的额外属性。请参阅docs.djangoproject.com 上的模型继承

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()
于 2013-07-23T13:44:52.997 回答
0

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

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

于 2013-07-23T11:03:24.193 回答