这不是程序错误修复问题。它看起来很傻,因为我没有太多设计网站的经验。我想在开始编写代码之前确保我的设计模式是正确的。
我想设计一个像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=...
如果我选择第一种方式,是否很容易在一个页面中按创建日期列出所有类型的帖子? 或者还有其他更好的方法吗?
答案 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()