Django: как проверить, зарегистрированы ли пользователи, зарегистрированные под моим именем, на новых пользователей, зарегистрированных под ними в Django
Я пишу логику реферальной системы на django. Сейчас реферальная система работает нормально, но я хочу реализовать следующее. Когда я направляю пользователя "user 2" и "user 3", сохраняется, что я направил двух пользователей, теперь как мне проверить, если "user 2" или "user 3", которые были направлены мной: получили ли они нового пользователя ("user 2" или "user 3").
Вот код, который я написал для регистрации пользователей в качестве рефералов views.py
def registerRef(request, *args, **kwargs):
profile_id = request.session.get('ref_profile')
print('profile_id', profile_id)
code = str(kwargs.get('ref_code'))
try:
profile = Profile.objects.get(code=code)
request.session['ref_profile'] = profile.id
print('Referer Profile:', profile.id)
except:
pass
print("Session Expiry Date:" + str(request.session.get_expiry_age()))
form = UserRegisterForm(request.POST or None)
if form.is_valid():
if profile_id is not None:
recommended_by_profile = Profile.objects.get(id=profile_id)
ref_earn = InvestmentPackageID.objects.get()
instance = form.save()
registered_user = User.objects.get(id=instance.id)
registered_profile = Profile.objects.get(user=registered_user)
registered_profile.recommended_by = recommended_by_profile.user
registered_profile.save()
else:
instance = form.save()
registered_user = User.objects.get(id=instance.id)
profile = Profile.objects.get(user=registered_user)
profile.save()
username = form.cleaned_data.get('email')
password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=password)
login(request, user)
return redirect('core:index')
context = {'form':form}
return render(request, 'userauths/sign-up.html', context)
в модели профиля у меня есть поле следующего вида models.py
class Profile(models.Model):
...
code = models.CharField(max_lenght=100, ...)
recommended_by = models.ForeignKey(User, ...)
Каким способом лучше всего добиться такой возможности?
Связана ли ваша модель профиля с пользователем с полем OneToOne (имя 'user')? Если да:
Если вам нужно только два уровня вложенных recommended_by, я бы выбрал:
my_recomended = Profile.object.filter(recommeded_by=request.user).value_list('user__id', flat=True)
second_level_recommended=Profile.object.filter(recommeded_by__in=my_recomended)