Skip to main content
 首页 » 编程设计

python之Django 休息框架 : Custom url pattern for Detail model-viewset with datetime lookup field

2024年10月17日33leader

我有一个 ModelViewSet,其查找字段定义为 timestamp(日期时间字段)而不是默认的 pk 字段

这是我的代码:

class MySerializer(serializers.ModelSerializer): 
    class Meta: 
        model = ACFCrowdData 
 
class MyViewSet(viewsets.ModelViewSet): 
    queryset = MyModel.objects.all() 
    serializer_class = MySerializer 
    lookup_field = 'timestamp' 

timestamp 字段的类型为 models.DatetimeField。

现在我想通过在 url 中将日期时间查找模式指定为 YYYYMMDDHHMISS 来访问我的模型的详细 View 集。相反,它只接受默认格式 YYYY-MM-DDTHH:MI:SS

我想完成这个。我希望将我的详细 View 集路由到 http://example.com/mymodel/YYYYMMDDHHMISS

任何帮助或提示都会很好

谢谢

请您参考如下方法:

您可以创建一个自定义的retrieve 方法并使用您自己的时间戳解析器。这样的事情可能会成功。我还没有尝试过这个特定的代码,但原理应该可行。

from datetime import datetime 
 
class MyViewSet(viewsets.ModelViewSet): 
 
    ... 
 
    def retrieve(self, request, timestamp=None): 
        queryset = self.get_queryset() 
        try: 
             parsedtime = datetime.strptime(timestamp, '%Y%m%d%H%M%S') 
        except ValueError: 
             # incorrect timestamp   
             ... 
        record = get_object_or_404(queryset, timestamp=parsedtime) 
        serializer = self.get_serializer(record) 
        return Response(serializer.data)