python - 超过日期时找不到 Django 页面
问题描述
我正在使用 django rest 框架(DRF)构建 django 应用程序。我有 DateField 类型的模型,我想根据 yyyy-mm-dd 格式的日期进行查询,例如http://127.0.0.1:8000/dataharian/2021-08-09/。我使用了此处提到的路径转换器并 进行了一些调整,以便 URL 能够接受 yyyy-mm-dd 格式。这是 DataHarian 模型、DataHarian 视图、转换器和 URL.py 文件
DataHarian 模型:
class DataHarian(models.Model):
tanggal = models.DateField(blank=False, null=False)
kumulatif = models.IntegerField(default=0)
sembuh = models.IntegerField(default=0)
dalam_perawatan = models.IntegerField(default=0)
meninggal = models.IntegerField(default=0)
def __str__(self):
return str(self.tanggal)
DataHarian 视图:
class DataHarianDetail(generics.RetrieveAPIView):
queryset = DataHarian.objects.all()
serializer_class = DataHarianSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
转换器:从日期时间导入日期时间
class TanggalConverter:
regex = '\d{4}-\d{2}-\d{2}'
def to_python(self, value):
return datetime.strptime(value, '%Y-%m-%d')
def to_url(self, value):
return value
网址.py
from django.urls import path, register_converter
from datetime import datetime
from . import views, converters
register_converter(converters.TanggalConverter, 'yyyy-mm-dd')
urlpatterns = [path('dataharian/<yyyy-mm-dd:tanggal>', views.DataHarianDetail.as_view()),]
* Tangal 是印尼语的日期
如果我的解释不够好,请给予反馈 谢谢您的回复
解决方案
默认情况下,APIViews 基于 field 进行查找pk
。要覆盖这一点,DataHarianDetail 需要lookup_field
设置:
class DataHarianDetail(generics.RetrieveAPIView):
lookup_field = 'tanggal'
queryset = DataHarian.objects.all()
serializer_class = DataHarianSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
但是,如果多条记录可以共享相同的日期,您将遇到问题。当有多个匹配项时,API 将抛出错误。
推荐阅读
- typescript - TypeScript 接口函数字段逆变类型错误
- momentjs - 为什么这个日期使用不同的小时值格式化?
- java - java.security.KeyStoreException:无法存储非 PrivateKeys
- azure - 通过 terraform 在 Azure 中跨订阅的 NSG 规则
- sql - 什么是包变量?
- java-8 - 主要可完成未来完成后如何同时调用多个可完成未来
- python - 为什么 ZeroMQ SUB 缺少消息?
- flutter - 如何根据颤动/飞镖中的当前时间创建从到到的时间段
- javascript - 如何使用 jest 设置反应功能组件的状态
- python - Python - 从抽象类继承时属性返回旧值