Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

232
Vistas
Editing models.py file and migrating changes to database in the same python code

I am looking to edit a models.py file for an app, and then migrate the changes to the database (postgreSQL) in the same python code.

In the view definition that is supposed to perform this, I am doing the following:

  1. Open models.py
  2. Append the new table's model to the existing models
  3. Close models.py
  4. Run makemigrations
  5. Run sqlmigrate
  6. Run migrate

It works fine up to Step no.3. The new table's model is being added to models.py, but 'makemigrations' doesn't take in the latest model that was added to models.py.

Effectively, it is not taking the latest copy of models.py for the migrations, it is using the one that existed BEFORE the view was called.

Is there a way to use the latest (appended with the required model) models.py file for the migration commands?

#Here we are attempting to create a user's portfolio table as soon as his registration is complete
            
            #Step1: Adding schema to model.py
            
            modeladdscript = '\n\nclass '+ username + '(models.Model):'
            modeladdscript = modeladdscript + '''
stock_id = models.CharField(max_length = 20)
stock_name = models.CharField(max_length = 100)
qty = models.IntegerField(default = 0)
investment = models.FloatField()
hold = models.CharField(max_length = 50)'''
            
            #Step 2: Getting the location of models.py in fileloc

            fileloc ='portfolio\models.py' #Need to figure out how to get location of portfolio/models.py
            
            #Step 3: Opening models.py and appending the model add script

            with open(fileloc,"a") as f:
                f.write(modeladdscript)
            
            #Step 4: Closing models.py
            f.close()
            #Works absolutely fine till here

            # Make migrations
            call_command('makemigrations')  #This command is not taking the model that has been added above at the time of user creation.

            # Remove all the terminal colors, less parsing later.
            os.environ['DJANGO_COLORS'] = 'nocolor'

            # Capturing the list of applied and unapplied migrations 
            out = StringIO()
            call_command('showmigrations', stdout=out)

            # Clean up the line, and remove all applied migrations
            work = [line.strip() for line in out.getvalue().split('\n') if not line.startswith(' [X]')]
            # Keep looping until we run out of lines.
            while work:
                app_name = work.pop(0)
                while work and work[0].startswith('['):
                    migration_name = work.pop(0)[4:]
                    app_path = apps.get_app_config(app_name).module.__file__
                    # Print the whole path to the migration file that corresponds to this migration
                    print('--', os.path.abspath(os.path.join(app_path, '../migrations/', '{}.py'.format(migration_name))))
                    call_command('sqlmigrate', app_name, migration_name[:8])
            
            # Applying all pending migrations
            call_command('migrate')
over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda