首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >你觉得我的Django模型结构怎么样?

你觉得我的Django模型结构怎么样?
EN

Stack Overflow用户
提问于 2017-03-26 17:50:35
回答 1查看 31关注 0票数 1
  1. 我的项目有两个或更多的不同类型的模型作为post。
  2. 我想为所有的贴图模特做书签
  3. 我需要仪表板或时间线来显示有书签的帖子,不管是什么类型的帖子。

所以我想有两个计划。

第一计划:

在每个帖子上制作不同的书签模型

比如:

代码语言:javascript
运行
复制
class UserProfile(models.Model):
    user = AutoOneToOneField(User, primary_key=True)#its_from_django-annoying

class Post1(models.Model):
    text1 = models.TextField(max_length=110)

class Post2(models.Model):
    text2 = models.TextField(max_length=120)

class bookmarkForPost1(models.Model):
    who_user = models.ForeignKey(UserProfile)
    what_bookmarked = models.ForeignKey(Post1)

class bookmarkForPost2(models.Model):
    who_user = models.ForeignKey(UserProfile)
    what_bookmarked = models.ForeignKey(Post2)

并在views.py中为仪表板做一些事情

第二个计划:

PostProfile模型的制作及书签

比如:

代码语言:javascript
运行
复制
class UserProfile(models.Model):
    user = AutoOneToOneField(User, primary_key=True)

class PostProfile(models.Model):
    description = models.TextField(max_length=100)
    #Do something to connect Post1 or Post2

class Post1(models.Model):
    text1 = models.TextField(max_length=110)
    #Do something to connect PostProfile

class Post2(models.Model):
    text2 = models.TextField(max_length=120)
    #Do something to connect PostProfile

class bookmarkForPosts(models.Model):
    who_user = models.ForeignKey(UserProfile)
    what_bookmarked = models.ForeignKey(PostProfile)

第二个计划似乎很简单,对我的眼睛也有好处。

第二个计划,我不知道我把OneToOneField放在哪里了。在PostProfile还是在Post1(+Post2)?另外,我无法理解如何在创建PostProfile或Post1或Post2之后自动创建Post2。但是第二个计划擅长的是,没有必要在views.py中做一些事情

我要问的是:

  1. “第一计划”和“第二计划”之间是否存在严重的绩效差异?如果是的话,还有什么更好呢?
  2. 你能给我一些关于完成第二个计划的建议吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-31 14:59:27

这样如何:定义一种类型的post,以便将来可以有更多类型的帖子,以及一个UserBookmark,这样用户就可以拥有他想要的书签:

代码语言:javascript
运行
复制
class UserProfile(models.Model):
    # its a good practice from django
    user = OneToOneField(User, primary_key=True)

class Post(models.Model):
    P_TYPE_1 = 1
    P_TYPE_2 = 2
    TAB_P_TYPE = {
        P_TYPE_1: _("Type 1"),
        P_TYPE_2: _("Type 2"),
    }
    post_type = models.IntegerField(
        choices=[(a, b) for a, b in list(TAB_P_TYPE.items())],
        default=P_TYPE_1)
    text = models.TextField(max_length=110)

class UserPostBookmark(models.Model):
    user = models.ForeignKey(UserProfile)
    post = models.ForeignKey(Post)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43032400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档