How to use django models with foreign keys in different DBs?
django, django-models, foreign-keys, mysql
Solution
Cross-database limitations
Django doesn't currently provide any support for foreign key or many-to-many relationships spanning multiple databases. If you have used a router to partition models to different databases, any foreign key and many-to-many relationships defined by those models must be internal to a single database.
Django - limitations-of-multiple-databases
Trouble
Same trouble. Bug in ForeignKey() class.
In validate() method.
See ticket
Bug exists in v1.2, v1.3, v1.4rc1
Solution
Try this patch to solve it.
Problem
I have 2 models for 2 different databases: Databases were created manually but it should change nothing. ``` class LinkModel(models.Model): # in 'urls' database id = models.AutoField(primary_key=True) host_id = models.IntegerField() path = models.CharField(max_length=255) class Meta: db_table = 'links' app_label = 'testapp' def __unicode__(self): return self.path class NewsModel(models.Model): # in default database id = models.AutoField(primary_key=True) title = models.CharField(max_length=50) link = models.ForeignKey(LinkModel) class Meta: db_table = 'news' app_label = 'test' def __unicode__(self): return self.title ``` After the following code an error raises ``` newsItem, created = NewsModel.objects.get_or_create( title="test" ) link = LinkModel.objects.using('urls').get( id=1 ) newsItem.link = link # error! Cannot assign "<LinkModel: />": instance is on database "default", value is on database "urls" ``` Why can't I use foreign key and a model for different database?