【问题标题】:django many to many duplicate relation issuedjango多对多重复关系问题
【发布时间】:2015-07-15 20:28:34
【问题描述】:

我需要跟踪用户对用户的邀请。谁用户邀请谁。 所以我有一个用户模型,它有一个 M2M 来“自我”。

class User(AbstractBaseUser, PermissionsMixin):

 …

# referral part
invited_by = models.ForeignKey("self", blank=True, null=True, db_index=True)
recruits = models.ManyToManyField("self", blank=True, null=True)
direct_matches = models.ManyToManyField("self", blank=True, null=True)
second_matches = models.ManyToManyField("self", blank=True, null=True)
third_matches = models.ManyToManyField("self", blank=True, null=True)

以及跟踪推荐的这部分代码:

@login_required
def do_ref_system_stuff(request):
    """
        Assign recruits on 'invited_by' user and invited_by to user.
    """

    if 'invited_by' in request.session:

        # Add user to recruits
        invited_by = get_object_or_404(User, pk=request.session['invited_by'])
        invited_by.recruits.add(request.user)
        invited_by.save()

        # Assign invited_by to the new user
        request.user.invited_by = invited_by
        request.user.save()

        del request.session['invited_by']
    return HttpResponseRedirect('/dashboard/')

现在:

invited_by.recruits.all()
[<User: prova>] # new registered user == 'request.user'

但如果我这样做了,为什么:

request.user.recruits.all()
[<User: dioc>] # invited_by

为什么关系是重复的?

谢谢

【问题讨论】:

  • 问题:为什么你的模型中同时有invite_by 和recruited?邀请人也是多对一的,新兵是多对多的?似乎自相矛盾

标签: django m2m


【解决方案1】:

为什么同时拥有invited_by 和recruits?你就不能这样做吗:

class User(AbstractBaseUser, PermissionsMixin):
    ...
    invited_by = models.ForeignKey("self", blank=True, null=True, db_index=True, related_name='recruits')

这将使您只需执行以下操作即可获得用户的新兵:

user.recruits.all()

【讨论】:

  • 真棒并跟踪二级/三级/四级推荐?
猜你喜欢
  • 2011-01-21
  • 2015-07-09
  • 2020-10-20
  • 2020-10-12
  • 1970-01-01
  • 2021-09-14
  • 2014-11-11
  • 2020-04-04
  • 1970-01-01
相关资源
最近更新 更多