Django按日期过滤,如“201803”

时间:2018-03-10 19:01:44

标签: python django rest filter

我的英语。我尝试创建一些像?date=201803这样的过滤器列表 - 它可以获得2018年03月的所有数据。这是我的模特:

class TestModel(models.Model):
    id = models.UUIDField(primary_key=True, unique=True, default=uuid.uuid4, editable=False)
    date = models.DateTimeField(blank=False)
    text = models.TextField(max_length=256, blank=False)

这是我的观点:

class TestView(generics.ListCreateAPIView):

    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = TestSerializer
    queryset = TestModel.objects.all()
    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('date',)

但是,如果我这样做可以查看某个日期:

?date=2005-03-12T21:48:00Z

字段date = models.DateTimeField(blank=False)必须为DateTimeField

怎么办这样的请求:?date=201803

UPD: 此代码返回空列表

permission_classes = (permissions.IsAuthenticated,)
    serializer_class = GlobalLogSerializer
    filter_backends = (DjangoFilterBackend, )
    filter_fields = ('date', )

    def get_queryset(self):
        queryset = GlobalLog.objects.all()
        date = self.request.query_params.get('date', None)
        if date is not None:
            queryset = GlobalLog.objects.filter(date__year=2017, date__month=3)
        return queryset

1 个答案:

答案 0 :(得分:2)

您必须将201803拆分为年份和月份。然后您可以使用以下查询

进行查询
TestModel.objects.filter(date__year=2018,date__month=03)

这是documentation link