建立一个不在最终用户之间的跟随系统

时间:2017-10-10 02:10:26

标签: python django django-models django-1.11

用例

我正在开发的应用程序是关于连接初创公司,求职者和投资者。对不起,我不能给 这个名字虽然我已经开发了大约40%:)。将有三个实体。一 是启动帐户,最终用户帐户和投资者帐户。我正在考虑添加跟随/取消关注功能

  • 最终用户可以关注启动,反之亦然
  • Startup可以跟随Investor,反之亦然
  • 最终用户无法关注其他最终用户,最终用户无法关注投资者

为此我应该如何建模我的应用程序

以下是我所谈论的实体的模型

最终用户模型

class UserSetting(models.Model):
    user = models.OneToOneField(User)
    job_interest = models.ManyToManyField(Category, related_name='user')
    is_email_notification = models.BooleanField(
        default=True, help_text="Email me job recommendations based on my interests and preferences")

    class Meta:
        verbose_name = 'User Setting'
        verbose_name_plural = 'User Settings'

    def __str__(self):
        return self.user.username

启动型号

class Startup(models.Model):
    name = models.CharField(max_length=200, unique=True,
                            blank=False, null=False)
    slug = models.SlugField(unique=True)
    description = models.CharField(max_length=400)

投资者模型

class Investor(models.Model):
    investor = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, blank=False,
                            null=False, help_text='Full Name')
    slug = models.SlugField(max_length=200, unique=True)
    contact_email = models.EmailField(null=True, blank=True)
    # for now I have done like this
    followers = models.ManyToManyField(
        User, related_name='followers', blank=True)

目前,您可以看到我在投资者中包含了关注者字段,但我在启动时也需要关注者系统,以便最终用户可以关注启动,反之亦然。同样在以下投资者中,只有创业公司可以遵循,但最终用户不应该。

对此最好的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

听起来您正在寻找构建交汇点对象。您希望针对这些对象注册用户。所以我可能会重新设计一下你的数据模型。以下是我的想法:

  • 投资者是一群名下的用户(Pasadena Angels,XYZ Venture Partners等)
  • Startup是一家拥有一组用户的公司
  • 最终用户是单一用户

但是django认证用户可以是“投资者”,“初创公司员工”或“最终用户”。并且天使投资人很可能是初创企业的执行员工。实际上,随着时间的推移,EndUser成为一名初创员工,这是可能的。

因此我会做这样的事情:

class EndUser(models.Model):
    user = models.OneToOneField(User)
    ...

class Startup(models.Model):
    name = models.CharField(max_length=100)
    ...

class StartupEmployee(models.Model):
    user = models.ForeignKey(User)
    startup = models.ForeignKey(Startup)
    ...

class InvestmentFirm(models.Model):
    name = models.CharField(max_length=100)
    ...

class Investor(models.Model):
    user = models.ForeignKey(User)
    firm = models.ForeignKey(InvestmentFirm)
    ...

class Follower(models.Model):
    user = models.ForeignKey(User)
    startup = models.ForeignKey(Startup, blank=True, null=True)
    firm = models.ForeignKey(InvestmentFirm, blank=True, null=True)
    ...

我的思维过程是数据模型不需要控制谁可以跟随谁的逻辑。我的思维过程是应用程序将有单独的视图,可以控制谁可以看到什么。换句话说,数据模型不应该阻止最终用户跟随其他最终用户。这应该是UI / UX的一部分。

这是我的快速破解建议。