Solución:
Cuando Django ejecuta el conjunto de pruebas, crea una nueva base de datos, en su caso test_finance
. El usuario de postgres con nombre de usuario django
no tiene permiso para crear una base de datos, de ahí el mensaje de error.
Cuando corres migrate
o syncdb
, Django no intenta crear el finance
base de datos, para que no obtenga ningún error.
Puede agregar el permiso createdb al usuario de django ejecutando el siguiente comando en el shell de postgres como superusuario (consejo para esta respuesta de desbordamiento de pila).
=> ALTER USER django CREATEDB;
Nota: El nombre de usuario utilizado en el ALTER USER <username> CREATEDB;
El comando debe coincidir con el usuario de la base de datos en sus archivos de configuración de Django. En este caso, el póster original tenía al usuario como django
la respuesta anterior.
He encontrado una solución interesante a tu problema.
De hecho, para MySQL puede otorgar privilegios para bases de datos no existentes.
Entonces puede agregar el nombre ‘test_finance’ para su base de datos de prueba en su configuración:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'finance', # Or path to database file if using sqlite3.
'USER': 'django', # Not used with sqlite3.
'PASSWORD': 'mydb123', # Not used with sqlite3.
'HOST': '127.0.0.1', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
'TEST': {
'NAME': 'test_finance',
},
}
}
inicie el shell MySQL como usuario root:
mysql -u root -p
y ahora otorgue todos los privilegios a esta base de datos inexistente en MySQL:
GRANT ALL PRIVILEGES ON test_finance.* TO 'django'@'localhost';
Ahora Django comenzará las pruebas sin ningún problema.
En el caso de Postgres, el usuario debe tener createdb
permiso.
ALTER ROLE miriam CREATEDB;
Consulte esta documentación: https://docs.djangoproject.com/en/2.0/topics/testing/overview/#the-test-database