如何在不同的DB中使用具有外键的django模型? [英] How to use django models with foreign keys in different DBs?
问题描述
数据库是手动创建的,但它不应该改变。
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
以下代码出现错误后,
newsItem ,created = NewsModel.objects.get_or_create(title =test)
link = LinkModel.objects.using('urls')。get(id = 1)
newsItem.link = link#error!
无法分配< LinkModel:/>:实例在数据库default上,值位于数据库urls
为什么我不能使用外键和不同数据库的模型?
跨数据库限制
Django当前没有提供任何支持外键或跨多个数据库的多对多关系。如果您使用路由器将模型分区到不同的数据库,那么这些模型定义的任何外键和多对多关系必须在单个数据库内部。
麻烦
同样的麻烦。 Bug在ForeignKey()类中。
在validate()方法中。
Bug存在于v1.2,v1.3,v1.4rc1
解决方案
尝试这个补丁来解决它。
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?
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.
Bug exists in v1.2, v1.3, v1.4rc1
Solution
Try this patch to solve it.
这篇关于如何在不同的DB中使用具有外键的django模型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!