0

I want to call password_generator method when Register class is instantiated and assign the value return from from the method to password field.

When the register object is instantiated, why do I get

RuntimeError at /register/

maximum recursion depth exceeded while calling a Python object

This is the code

models.py

class Register(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    email = models.EmailField(max_length=120, blank=False, null=False)
    password = models.TextField(blank=False, null=False)
    firstname= models.CharField(max_length=120, blank=False, null=False)
    lastname = models.CharField(max_length=120, blank=False, null=False)
    phonenumber = models.CharField(max_length=120, blank=True, null=True)

    def __init__(self, *args, **kwargs):
        self.password = Register().password_generator()

    #Generate random login password for candidate
    def password_generator(self, size=30, chars=string.ascii_letters + string.digits + string.punctuation):
        return ''.join(random.choice(chars) for i in range(size))

Logs from the terminal

console

  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()
  File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
    self.password = Register().password_generator()

How to fix this?

1 Answer 1

0

After many attempts, I came to realize that the function that I'm trying to call is in infinite loop. To access password_generator() method, I have to do Register().password_generator(). So that's also means __init__ method is called- because of Register(). In the __init()__, I again call Register(). This is why it becomes an infinite loop. To solve this, we have to use:

    def __init__(self, *args, **kwargs):
    self.password = self.password_generator()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.