当前,当引用任何外键时,(很多对很多,一对多)DRF似乎是从默认(身份验证)数据库中获取信息的,所以我收到错误消息,说“不存在关系”,因为没有我想要获取的身份验证数据库中存在的表。我希望它从与请求相同的数据库中进行选择。有什么办法可以在序列化器中获取请求(或自身),以便从中选择数据库?我相信使用
可以创建/更新def to_internal_value(self, data):
request = self.context.get('request')
但这仅在创建/更新时调用,仅列出值时有办法吗?我的初始查询(来自视图集)从正确的数据库中选择,因为我可以通过请求进行选择,但是当它通过序列化程序时,它将尝试从默认(auth)数据库中获取外键。必须有某种方法可以指定数据库,而不要使用默认权限?
答案 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_replica
在 settings.py
中定义:
replica_database_url = os.environ.get("DATABASE_REPLICA_URL") or database_url
DATABASES["your_read_replica"] = dj_database_url.parse(replica_database_url)