Django多对多重复关系问题
问题描述:
我需要跟踪用户之间的邀请.谁用户邀请谁. 因此,我有一个用户模型,该模型具有自我"的M2M.
I need to track invite from users to user. Who users invite who. So I have a User model that have a M2M to "self".
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)
以及跟踪引荐的这段代码:
and this part of code that track referral:
@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
为什么关系重复?
谢谢
答
为什么同时具有invited_by
和recruits
?你不能只是做:
Why have both invited_by
and recruits
? Couldn't you just do:
class User(AbstractBaseUser, PermissionsMixin):
...
invited_by = models.ForeignKey("self", blank=True, null=True, db_index=True, related_name='recruits')
这样一来,您就可以通过以下方式吸引用户:
That would allow you to get a user's recruits by simply doing:
user.recruits.all()