2017-03-26 28 views
1
  1. 我的项目有2个或更多的不同类型的模型作为后
  2. ,我想书签各类岗位车型
  3. 我需要仪表板或时间轴,显示书签的职位无论那种职位

所以我想2计划。你对我的Django模型结构有什么看法?

第一个计划:

在每一个岗位

喜欢做不同的书签模型:

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模型,书签,

像:

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)?另外,我无法理解如何在创建Post1或Post2后自动创建PostProfile。 但是第二个计划是擅长,有没有需要做views.py

东西我问的是:

  1. 是否有第一个计划和第二个计划之间存在严重的性能差异?如果是,有什么更好?
  2. 你愿意给我一些建议来完成第二个计划吗?
+1

你可能考虑将你的问题转移到代码审查,如果它是收集有关想法和样式的评论。 – gonczor

回答

2

如何:定义一个类岗位的,所以你可以有更多类型的帖子在未来,和UserBookmark因此用户可以有很多书签他想:

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) 
+0

感谢您的回答 – touchingtwist

+1

欢迎您,我的荣幸! –