如何使用序列化程序选择数据库并避免使用默认值

时间:2019-03-12 15:45:35

标签: django-rest-framework django-serializer

当前,当引用任何外键时,(很多对很多,一对多)DRF似乎是从默认(身份验证)数据库中获取信息的,所以我收到错误消息,说“不存在关系”,因为没有我想要获取的身份验证数据库中存在的表。我希望它从与请求相同的数据库中进行选择。有什么办法可以在序列化器中获取请求(或自身),以便从中选择数据库?我相信使用

可以创建/更新
def to_internal_value(self, data):
    request = self.context.get('request')

但这仅在创建/更新时调用,仅列出值时有办法吗?我的初始查询(来自视图集)从正确的数据库中选择,因为我可以通过请求进行选择,但是当它通过序列化程序时,它将尝试从默认(auth)数据库中获取外键。必须有某种方法可以指定数据库,而不要使用默认权限?

1 个答案:

答案 0 :(得分:0)

您或许可以在视图级别使用 get_queryset

class YourModelDRFGetView(generics.ListAPIView):
    serializer_class = YourModelDRFViewSerializer

    def get_queryset(self):
        return YourModel.objects.using('your_read_replica').all()

其中 your_read_replicasettings.py 中定义:

replica_database_url = os.environ.get("DATABASE_REPLICA_URL") or database_url
DATABASES["your_read_replica"] = dj_database_url.parse(replica_database_url)