【发布时间】:2019-08-10 17:18:02
【问题描述】:
我想为当前用户设计一个模型,以查看他推荐的所有人。我创建了另一个模型来跟踪用户之间的所有推荐关系,例如'stephen -> jack'、'stephen -> mike'
class CustomUser(AbstractBaseUser):
// ....... a lot more fields
referred_who = models.ForeignKey('referral', blank=True, null=True, on_delete = models.CASCADE)
class Referral(models.Model):
referrer = models.ForeignKey(CustomUser, on_delete = models.CASCADE)
referred = models.ForeignKey(CustomUser, on_delete = models.CASCADE, related_name='referred')
class Meta:
unique_together = (("referrer", "referred"),)
def __str__(self):
return self.referrer.username + ' -> ' + self.referred.username
我现在遇到的问题是一个用户可以推荐多个用户,但我用来跟踪所有推荐关系的字段“referred_who”只能保留其中一个。在我的后端管理中显示:
Referred who: stephen1 -> stephen2 (with a dropdown with all the relations but I can only choose one of them)
我想要的是这样的:
Referred who: stephen1 -> stephen2 stephen1 -> stephen3 stephen1 -> stephen4
我可以访问“Referred_who”字段来获取当前用户拥有的所有关系。
有没有办法添加到外键字段而不是只选择其中一个?有人可以给我举个例子吗?非常感谢。
【问题讨论】:
-
你做错了方向,你不需要
Referral类。只需将referred_by = models.ForeignKey('self', ...)字段添加到您的CustomUser。如果您想存储额外的信息(例如referral_date),您可以将ManyToMany关系与直通表一起使用。有关详细信息,请参阅 Django 文档。 -
您好,您能解释一下添加referred_by = models.ForeignKey('self', ...) 如何帮助我获得当前用户推荐的所有用户吗?我仍然需要一个字段供用户跟踪他推荐的人,对吗?因为我想访问“user.referral_who”来获取所有用户。
-
这是一个非常广泛的话题,但简单地说,
ForeignKey是双向字段。请参阅 Django 文档并阅读有关关系数据库的更多信息。 -
最好的方法是Selcuk也提到的自我参照模型,查看文档docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
标签: django django-models django-rest-framework