Добрый день жители форума! Возникла такая проблема.
Есть модель пользователя
class StpUser(MPTTModel, AbstractUser):
GENDER_CHOICES = ((1, _('Male'),), (2, _('Female'),),)
parent = models.ForeignKey('self', null=True, blank=True, related_name='clients',
db_index=True, verbose_name=_('Sponsor'))
кусочек кода чтоб было понятно про что речь. При регистрации пользователя выполняется
метод
StpUser.objects.rebuild()
который я так понимаю обновляет дерево зависимости в модели
так вот было замечено что с увеличением количества пользователей увеличивается и время выполнения этого метода сразу приведу код views где он используется
def email(request):
form = EmailForm()
if request.user.is_authenticated():
return JsonResponse({'errors': _('You are currently logged in. Please log out first.')})
if request.method == 'POST' and request.is_ajax():
ValidateEmail(request.POST.get('email', ''))
if request.POST:
form = EmailForm(request.POST)
if form.is_valid():
try:
existing_user = StpUser.objects.get(email=form['email'].value())
except:
existing_user = None
if existing_user is not None:
form = EmailForm(request.POST, instance=existing_user)
u = form.save()
u.parent_id = int(request.session.get('parent_user', None))
u.from_page_id = request.session.get('page_id', None)
try:
u.from_page = UserPage.objects.get(pk=request.session.get('page_id', None))
except:
pass
# raise Exception(request.session.get('parent_user', None))
u.save()
StpUser.objects.rebuild()
domain = main_domain(request)['domain']
_token = default_token_generator.make_token(u)
verify_url = reverse('confirm-email', kwargs={
"uidb36": int_to_base36(u.id),
"token": _token})
context = {
"request": request,
'domain': domain,
"user": u,
"verify_url": verify_url,
'site': Site.objects.get_current(),
}
StpCacheToken.objects.create(user=u, token=_token, uidb36=int_to_base36(u.id), ts=now(),
valid_to=now() + timedelta(days=30))
tpl = MailTemplate.objects.get(filename='registration-by-email')
data = tpl.render(context)
send_mail(data['subject'], data['text'], settings.DEFAULT_FROM_EMAIL, [u.email], html_message=data['html'])
# raise Exception(data['html'])
# mail_sponsor = send_mail_to_sponsor(u.parent_id)
_next = request.path
if request.is_ajax():
return JsonResponse({'message': _('Письмо было отправлено %s. '
'Следуйте инструкциям, приведенным в этом письме.') % (u.email,)})
if request.GET.get('next', None) is not None:
_next = request.GET.get('next', None)
return redirect(_next)
elif request.is_ajax():
return JsonResponse({'errors': form.errors})
return TemplateResponse(request, 'account/email_form.html', {'form': form, 'bs': request.GET.get('bootstrap', 0)})
Вопрос вот в чём как решить проблему с быстротой этого метода или может его вынести из функции или просто вызывать его внутри ?