我们有一个问题是使用Django和django-rest-framework制作多租户SaaS应用程序。
我们希望根据url路由到正确的数据库,并使用django-rest-framework序列化器。
但是使用django-rest-framework,我们无法使用序列化程序指定要保存的数据库。我们可以通过覆盖get_queryset
方法和using(<database>)
函数来请求数据。
class SomeSerializer(serializers.ModelSerializer):
def get_queryset(self):
return SomeModel.objects.using(self.database)
如果我们想将实例保存到自定义数据库,我们无法使用ModelSerializer
,我们必须使用Serializer
类编写每个序列化程序。
我们可以发出拉取请求,将选项添加到django-rest-framework Multiple databases support #65 - django-rest-framework
或者,我们可以执行类似于此代码段的操作:Database Routing by URL,它已经很老了(2010年),但仍然有效。但是我们对使用本地线程传输变量的想法不太满意。
2017年我们如何正确地做到这一点?还有其他选择吗?