另一个db模型上的GenericForeignKey

时间:2014-05-23 10:21:48

标签: database django django-models orm

在我的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路由到正确的数据库的任何建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

https://docs.djangoproject.com/en/dev/topics/db/multi-db/#limitations-of-multiple-databases

Django不支持跨越不同dbs的ForeignKey或ManyToMany关系。这同样适用于GenericForeignKey。

您的两个模型需要位于同一个数据库中。

相关问题