用例
我正在开发的应用程序是关于连接初创公司,求职者和投资者。对不起,我不能给 这个名字虽然我已经开发了大约40%:)。将有三个实体。一 是启动帐户,最终用户帐户和投资者帐户。我正在考虑添加跟随/取消关注功能
为此我应该如何建模我的应用程序
以下是我所谈论的实体的模型
最终用户模型
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)
目前,您可以看到我在投资者中包含了关注者字段,但我在启动时也需要关注者系统,以便最终用户可以关注启动,反之亦然。同样在以下投资者中,只有创业公司可以遵循,但最终用户不应该。
对此最好的解决方案是什么?
答案 0 :(得分:0)
听起来您正在寻找构建交汇点对象。您希望针对这些对象注册用户。所以我可能会重新设计一下你的数据模型。以下是我的想法:
但是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的一部分。
这是我的快速破解建议。