pythondjangodjango-models

Writing a __init__ function to be used in django model


I'm trying to write an __init__ function for one of my models so that I can create an object by doing:

p = User('name','email')

When I write the model, I have:

def __init__(self, name, email, house_id, password):
    models.Model.__init__(self)
    self.name = name
    self.email = email

This works and I can save the object to the database, but when I do User.objects.all(), it doesn't pull anything up unless I take out my __init__ function. Any ideas?


Solution

  • Relying on Django's built-in functionality and passing named parameters would be the simplest way to go.

    p = User(name="Fred", email="fred@example.com")
    

    But if you're set on saving some keystrokes, I'd suggest adding a static convenience method to the class instead of messing with the initializer.

    # In User class declaration
    @classmethod
    def create(cls, name, email):
      return cls(name=name, email=email)
    
    # Use it
    p = User.create("Fred", "fred@example.com")