【问题标题】:How to implement Django users referred by other users relationship?如何实现其他用户关系引用的Django用户?
【发布时间】:2019-10-16 14:01:37
【问题描述】:

我想实现一种方法来跟踪我的 django 应用程序中的推荐。我正在使用默认的用户表。一个用户可以“推荐”多个人,但一个被推荐的用户只能被一个用户推荐。

我已尝试将其添加到我的 models.py 中,但它会导致错误。

class Referral(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    referredBy = models.ForeignKey(User, on_delete=models.CASCADE)

这会导致以下错误:

ERRORS:
RateManager.Referral.referredBy: (fields.E305) Reverse query name for 'Referral.referredBy' clashes with reverse query name for 'Referral.user'.
    HINT: Add or change a related_name argument to the definition for 'Referral.referredBy' or 'Referral.user'.

我该如何实施?

【问题讨论】:

  • 您是否尝试按照提示进行操作?

标签: mysql sql django django-models one-to-many


【解决方案1】:

只需省略referredBy = models.ForeignKey(User, on_delete=models.CASCADE),因为OneToOneField 已经引用了Users 表。

如果出于某种原因您需要拥有两列(我不明白为什么),您可以更改模型的 related_name 属性:

class Referral(models.Model):
    user = models.OneToOneField(User, related_name='user', on_delete=models.CASCADE)
    referredBy = models.ForeignKey(User, related_name='referredBy', on_delete=models.CASCADE)

【讨论】:

  • 我无法跟踪当时是谁推荐了每个用户。当以“jo​​hn”身份登录时,我希望能够显示“john”所指的所有用户。
  • @NirmalMulji 您是否尝试更改related_name 属性?
  • 这行得通。我现在可以使用以下方法查询其他用户推荐的所有用户:referrals = Referral.objects.filter(referredBy=user_id)
  • 你能解释一下为什么你需要一个'related_name'属性吗?
  • 我不太确定,但我认为这与 Django 为外键关系选择的名称有关。如果你引用同一个表两次,它会尝试将两个外键命名为相同的名称,这是你做不到的。
猜你喜欢
  • 2014-11-19
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 2019-02-11
  • 2016-02-22
  • 2011-02-05
相关资源
最近更新 更多