我正在实现一个用户推荐系统,现有用户可以推荐其他人使用他们提供的链接注册一个帐户。新用户注册后,新用户将被存储到现有用户的“ referred_who”字段中。
我尝试使用以下方法:
class CustomUser(AbstractBaseUser):
...
referred_who = models.ManyToManyField('self', blank=True, symmetrical=False)
class ReferralAward(View):
def get(self, request, *args, **kwargs):
referral_id = self.request.GET['referral_id']
current_referred = self.request.GET['referred']
// referrer
user = get_user_model().objects.filter(referral_id=referral_id)
// user being referred
referred_user = get_user_model().objects.filter(username=current_referred)
for item in user:
previous_referred = item.referred_who
previous_referred.add(referred_user[0])
user.update(referred_who=previous_referred)
我收到以下错误:
Cannot update model field <django.db.models.fields.related.ManyToManyField: referred_who> (only non-relations and foreign keys permitted).
我不确定该方法是否有效。我检查了Django Admin后端,并意识到“ Referred who”字段实际上包含所有用户。似乎它仅突出显示被推荐的用户,而不是仅显示被推荐的用户。
此外,我尝试访问后端的“ referred_who”字段,并返回“ None”。
是否有一种方法可以将用户存储在“ referred_who”字段中,以便可以看到所有被推荐的用户并在后端访问它们?例如:
referral_id = self.request.GET['referral_id']
user = get_user_model().objects.filter(referral_id=referral_id)
print(user[0].referred_who)
有人可以向我展示一种更好的方法吗?非常感谢!
答案 0 :(得分:0)
您询问如何创建1-Many字段,但是在模型中您尝试创建m2m。只需将字段更改为FK。
referred_who = models.ForeignKey('self', blank=True)
。
如果同一模型需要多个fks,则还需要指定related_name
。您可以为其使用字段名称。 docs中的更多内容。