在我的Widget模型上,我希望有一个名为Filter的模型的GenericForeignKey,它被映射到另一个具有适当数据库路由器的数据库表上:
# default database
class Widget(models.model):
content_type = models.ForeignKey(ContentType, blank=True, null=True)
object_id = IntegerField(blank=True, null=True)
content_object = generic.GenericForeignKey()
# router on the second db
class Db2_Manager(models.manager.Manager):
db = 'db2'
def get_queryset(self):
return queryset(self.model, using=self.db)
# Model on the second db
class Filter(models.Model):
title=models.TextField()
class Meta:
db_table = u'abc\".\"_filter'
objects = Db2_Manager()
django shell中的示例:
[in] : f1 = Filter.objects.first() # This is the external db object, which works
[in] : f1.title
[out]: 'My title'
[in]: new_widget = Widget(content_type=ContentType.objects.get_for_model(f1), object_id=f1.id)
[in] : new_widget.save()
[in] : new_widget.content_type
[out]: <ContentType: filter>
[in] : new_widget.object_id
[out]: 23
[in] : new_widget.content_object
[out]: ProgrammingError: schema "abc" does not exist
我已经在Filter数据库(db2)上复制了django_content_type表,但是我得到了上面的错误...有关如何正确地将new_widget.content_object
路由到正确的数据库的任何建议吗?
提前致谢。
答案 0 :(得分:0)
https://docs.djangoproject.com/en/dev/topics/db/multi-db/#limitations-of-multiple-databases
Django不支持跨越不同dbs的ForeignKey或ManyToMany关系。这同样适用于GenericForeignKey。
您的两个模型需要位于同一个数据库中。