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

如何在Django REST Framework中获取最后添加的产品?

获取DRF中最后添加的产品的几种实现方式

作为DRF新手,其实获取最近添加的产品并不复杂,这里给你几种实用的落地方法:

1. 模型层直接获取最新记录

Django的ORM自带了latest()方法,专门用来抓取最新创建的对象。如果你的Products模型还没加时间字段,默认的自增主键id就能满足需求——毕竟新创建的记录id值肯定更大:

# 在视图或业务逻辑中调用
try:
    latest_product = Products.objects.latest('id')
except Products.DoesNotExist:
    # 处理数据库为空的情况,比如返回None或提示信息
    latest_product = None

如果想更规范,建议给模型加上创建时间字段(后续排查问题也更方便):

# 修改Models.py
class Products(models.Model):
    name = models.CharField(max_length=100)
    image = models.CharField(max_length=100, null=True)
    # 原有字段...
    created_at = models.DateTimeField(auto_now_add=True)  # 新增:创建时自动记录时间

之后就能直接基于时间字段获取最新产品:

latest_product = Products.objects.latest('created_at')

2. 在DRF视图中返回最新产品数据

接下来把这个逻辑整合到DRF视图里,以最基础的APIView为例:

先准备好序列化器(假设你已有基础的序列化器结构)

# serializers.py
from rest_framework import serializers
from .models import Products

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Products
        fields = '__all__'  # 或者指定你需要返回的具体字段,比如['name', 'image']

编写视图逻辑

# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Products
from .serializers import ProductSerializer

class LatestProductView(APIView):
    def get(self, request):
        try:
            latest_product = Products.objects.latest('id')
            serializer = ProductSerializer(latest_product)
            return Response(serializer.data, status=status.HTTP_200_OK)
        except Products.DoesNotExist:
            return Response({"detail": "暂无产品数据"}, status=status.HTTP_404_NOT_FOUND)

配置URL路由

# urls.py
from django.urls import path
from .views import LatestProductView

urlpatterns = [
    path('products/latest/', LatestProductView.as_view(), name='latest-product'),
]

3. 用ViewSet的自定义动作实现

如果你在用ModelViewSet管理产品接口,可以额外添加一个自定义动作来返回最新产品:

# views.py
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework import status
from .models import Products
from .serializers import ProductSerializer

class ProductViewSet(viewsets.ModelViewSet):
    queryset = Products.objects.all()
    serializer_class = ProductSerializer

    @action(detail=False, methods=['get'])
    def latest(self, request):
        try:
            latest_product = self.queryset.latest('id')
            serializer = self.get_serializer(latest_product)
            return Response(serializer.data)
        except Products.DoesNotExist:
            return Response({"detail": "暂无产品数据"}, status=status.HTTP_404_NOT_FOUND)

配置router后,会自动生成类似/products/latest/的访问路径。

注意事项

  • 务必捕获DoesNotExist异常,避免数据库为空时返回500服务器错误
  • 优先使用created_at时间字段而非主键,避免手动修改主键导致逻辑失效

内容的提问来源于stack exchange,提问作者Dhany P Sukumaran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:03:17