0

使用事例

私が開発しているアプリは、スタートアップ、求職者、投資家をつなぐものです。申し訳ありませんが、私はすでに約 40% を開発しましたが、まだ名前を付けることができませんでした :) .3 つのエンティティがあります。1 つは、スタートアップ アカウント、エンドユーザー アカウント、および投資家アカウントです。フォロー/フォロー解除機能を追加することを考えています

  • エンドユーザーはスタートアップをフォローでき、その逆も可能
  • スタートアップは投資家をフォローでき、その逆も可能
  • エンドユーザーは他のエンドユーザーをフォローできず、エンドユーザーは投資家をフォローできません

このために、アプリケーションをどのようにモデル化する必要がありますか

これが私が話したエンティティのモデルです

エンドユーザー モデル

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)

今のところ、投資家にフォロワー フィールドを含めていることがわかりますが、エンドユーザーがスタートアップをフォローできるように、またその逆もできるように、スタートアップにもフォロワー システムが必要です。また、投資家をフォローする場合、スタートアップのみがフォローできますが、エンドユーザーはフォローしないでください。

これに対する最善の解決策は何ですか?

4

1 に答える 1

0

ジャンクション オブジェクトを構築しようとしているようです。これらのオブジェクトに対してユーザーを登録します。したがって、おそらくデータモデルを少し再設計します。ここに私の考えがあります:

  • 投資家は、名前 (Pasadena Angels、XYZ Venture Partners など) の下のユーザーのグループです。
  • スタートアップはユーザーのグループを持つ会社です
  • エンドユーザーは単一のユーザーです

ただし、django の認証済みユーザーは、「投資家」、「スタートアップの従業員」、または「エンド ユーザー」のいずれかです。そして、エンジェル投資家はスタートアップの幹部社員である可能性が高い. 実際には、時間の経過とともに EndUser が Startup Employee になることが望ましいように思えます。

したがって、私は次のようにします:

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の一部であるべきです。

それは推奨事項での私の簡単なハックです。

于 2017-10-10T05:44:17.237 に答える