You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用react-admin搭配ra-data-django-rest-framework遇依赖错误,求替代方案

解决方案

替代包推荐

  • ra-data-rest-client(React Admin官方维护的通用REST数据提供者)
    这个包适配标准REST API,Django REST Framework(DRF)的默认输出格式大部分能直接兼容,仅需少量配置适配DRF的特有规则(比如分页、过滤参数)。
    安装命令:

    npm install ra-data-rest-client
    

    配置示例(适配DRF分页):

    import { Admin, Resource } from 'react-admin';
    import { restClient } from 'ra-data-rest-client';
    
    const drfRestClient = restClient('http://your-django-api-url', fetch, {
      getList: (resource, params) => {
        const { page, perPage } = params.pagination;
        const { field, order } = params.sort;
        const query = new URLSearchParams({
          page,
          page_size: perPage,
          ordering: order === 'ASC' ? field : `-${field}`,
          ...params.filter,
        });
        return fetch(`${resource}/?${query}`)
          .then(response => response.json())
          .then(({ count, results }) => ({
            data: results,
            total: count,
          }));
      },
      // 其他方法(getOne, create等)若无需特殊处理可沿用默认实现
    });
    
    const App = () => (
      <Admin dataProvider={drfRestClient}>
        {/* 配置你的Resource */}
      </Admin>
    );
    
  • 自定义数据提供者
    如果通用包无法满足需求,直接手写数据提供者更灵活。React Admin的数据提供者本质是包含getList、getOne、create、update、delete等方法的对象,只需根据DRF的API格式实现这些方法即可。
    极简示例:

    const drfDataProvider = {
      getList: async (resource, params) => {
        const url = new URL(`http://your-django-api-url/${resource}/`);
        url.searchParams.set('page', params.pagination.page);
        url.searchParams.set('page_size', params.pagination.perPage);
        url.searchParams.set('ordering', params.sort.order === 'ASC' ? params.sort.field : `-${params.sort.field}`);
        Object.entries(params.filter).forEach(([key, value]) => url.searchParams.set(key, value));
    
        const response = await fetch(url);
        const { count, results } = await response.json();
        return {
          data: results.map(item => ({ ...item, id: item.pk })), // 若DRF用pk作为主键,需映射为id
          total: count,
        };
      },
      getOne: async (resource, params) => {
        const response = await fetch(`http://your-django-api-url/${resource}/${params.id}/`);
        const data = await response.json();
        return { data: { ...data, id: data.pk } };
      },
      // 按需实现create、update、delete等方法
    };
    

关于使用其他数据提供者的可行性

完全可以使用其他数据提供者,只要你能将DRF API的参数格式、返回结构与数据提供者的要求适配。比如上述的通用REST包,或者甚至用ra-data-json-server(需更多适配,因为它默认适配JSON Server的格式),但自定义或用通用REST包是更高效的选择。

内容的提问来源于stack exchange,提问作者Hem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:47:43