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

Django Rest Framework搭配React时按Stocks表date字段排序失效问题

问题根因

你的渲染逻辑优先级是先按productsInfo的顺序遍历产品,再匹配每个产品对应的库存记录,因此即使stocksInfo本身已经按date正确排序,最终渲染的列表顺序由产品顺序决定,仅同个产品下的库存记录会保持date排序,跨产品的记录顺序会不符合预期。

解决方案

方案1:前端合并数据后整体排序(改造成本最低)

先把库存数据和关联的产品信息合并为单个数组,整体按date排序后再渲染:

// 合并关联数据并全局排序
const mergedStockList = stocksInfo.map(stock => {
  const matchedProduct = productsInfo.find(p => p.product_id === stock.product_id)
  return {
    ...stock,
    productName: matchedProduct?.name ?? '-'
  }
// 日期排序,字符串格式日期会自动转时间戳比较
}).sort((a, b) => new Date(a.date) - new Date(b.date))

然后直接遍历排序后的合并列表渲染:

{mergedStockList.map((item, index) => (
  // 建议把key替换为stock表的唯一主键,避免列表变动时渲染异常
  <tr key={item.id ?? index} className="table-data">
    <td className="col-3">{item.productName}</td>
    <td className="col-3">{item.date}</td>
    <td className="col-1">{item.count}</td>
  </tr>
))}

方案2:后端直接返回带产品信息的排序数据(性能更优)

修改Django序列化器,直接在库存接口返回关联的产品名称,前端无需二次关联,避免顺序错乱:

# 序列化器新增关联产品名称字段
class StocksSerializer(serializers.ModelSerializer):
    product_name = serializers.CharField(source='product.name', read_only=True)
    class Meta:
        model = Stocks
        # 把product_name加入返回字段列表
        fields = ['id', 'date', 'count', 'product_id', 'product_name']

前端直接遍历接口返回的stocksInfo即可,无需再关联productsInfo。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:45:03