def save(self, commit=True): user = super(RegistrationForm, self).save() referrer = Account.get_referrer_by_code( self.cleaned_data.get('referral_code')) activation_code = str(uuid.uuid4()) acc = Account.objects.create(user_fk=user, referrer_fk=referrer, referral_code=str(uuid.uuid4()), activation_code=activation_code) smtpserver = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT) smtpserver.ehlo() smtpserver.starttls() try: smtpserver.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD) smtpserver.sendmail('Test', user.email, activation_code) except Exception: pass smtpserver.quit() if acc.referrer_fk: points = acc.referrer_fk.referrals.count() + 1 u = acc data_to_update = [] while (u is not None or u.referrer_fk is not None) and points > 0: rr = u.referrer_fk.referrer_fk if not rr: u.referrer_fk.points += points data_to_update.append(u.referrer_fk) break else: u.referrer_fk.points += 1 data_to_update.append(u.referrer_fk) points -= 1 u = u.referrer_fk Account.objects.bulk_update(data_to_update, ['points']) return user
def clean_referral_code(self): if Account.objects.count() > 5: if not self.cleaned_data.get('referral_code'): raise ValidationError('Обязательное поле') if not Account.get_referrer_by_code( self.cleaned_data.get('referral_code')): raise ValidationError('Неверный код') return self.cleaned_data.get('referral_code')