Django多对多重复关系问题 [英] django many to many duplicate relation issue

查看:342
本文介绍了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_byrecruits?你不能只是做:

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()

这篇关于Django多对多重复关系问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆