Hello,
Therefore these are the class routers:
-- In my project I have 3 applications, and I'm trying to split them across 2 databases.
More specifically 2 of the apps and Django "auth" application should work with the first database,
and the last application should remain in the second database.
and the last application should remain in the second database.
These are the DB settings:
DATABASE_ROUTERS = [ '<PATH_TO_ROUTER>.PrimaryRouter', '<PATH_TO_ROUTER>.ValidationRouter']
DATABASES = { 'default': {}, 'primary': { 'NAME': 'primary', 'ENGINE': 'django.db.backends.postgresql', 'USER': '<DB_USER>', 'PASSWORD': '<DB_PASS>', 'HOST': 'localhost', }, 'validations': { 'NAME': 'validations', 'ENGINE': 'django.db.backends.postgresql', 'USER': '<DB_USER>', 'PASSWORD': '<DB_PASS>', 'HOST': 'localhost', }}
Therefore these are the class routers:
class PrimaryRouter: """ Router to control all database operations for the following applications: - first_model - second_model - auth """ def db_for_read(self, model, **hints): if model._meta.app_label == 'auth' or \ model._meta.app_label == 'first_model' or \ model._meta.app_label == 'second_model':
return 'primary'
return None
def db_for_write(self, model, **hints): if model._meta.app_label == 'auth' or \ model._meta.app_label == 'first_model' or \ model._meta.app_label == 'second_model':
return 'primary'
return None
def allow_relation(self, first_object, second_object, **hints): if first_object._meta.app_label == 'auth' or \ second_object._meta.app_label == 'auth': return True if first_object._meta.app_label == 'first_model' or \ second_object._meta.app_label == 'first_model':
return True
if first_object._meta.app_label == 'second_model' or \ second_object._meta.app_label == 'second_model':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints): if app_label == 'auth' or \ app_label == 'first_model' or \ app_label == 'second_model':
return db == 'primary'
return None
class ValidationRouter: """ Router to control all database operations for the following applications: - fourth_model """ def db_for_read(self, model, **hints): if model._meta.app_label == 'fourth_model': return 'validations'
return None
def db_for_write(self, model, **hints): if model._meta.app_label == 'fourth_model': return 'validations'
return None
def allow_relation(self, first_object, second_object, **hints): if first_object._meta.app_label == 'fourth_model' or \ second_object._meta.app_label == 'fourth_model': return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints): if app_label == 'fourth_model': return True return None
When I run migration on the first database "primary", everything is working.
But on the second database I'm getting the following exception:
django.db.utils.ProgrammingError: relation "auth_user" does not exist
The question - do I need to also specify the "auth" Django application in the second DB router "validations",
or there's something wrong with my setup ?
or there's something wrong with my setup ?
According to Django docs for version 2.1, this kind of setup is working - https://docs.djangoproject.com/en/2.1/topics/db/multi-db/ .
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/8eef7cfe-93ed-4322-ab84-09261e27f460%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment