Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django基于时间的查询集提供意外响应_Python_Django - Fatal编程技术网

Python Django基于时间的查询集提供意外响应

Python Django基于时间的查询集提供意外响应,python,django,Python,Django,我的表格如下: class Availability(models.Model): arena = models.ForeignKey(Arena, null=True) start_date = models.DateTimeField() end_date = models.DateTimeField() token = UUIDField(auto=True, unique=True, null=True) validity = models.Dat

我的表格如下:

class Availability(models.Model):
    arena = models.ForeignKey(Arena, null=True)
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()
    token = UUIDField(auto=True, unique=True, null=True)
    validity = models.DateTimeField(null=True)
def post(self, request):
    data = request.DATA
    arena = data['arena']
    start_time = datetime.datetime.strptime(data['start_time'], '%d/%m/%Y %H:%M')
    end_time = datetime.datetime.strptime(data['end_time'], '%d/%m/%Y %H:%M')
    try:
        slots = Availability.objects.filter(Q(arena__id=arena), Q(start_date__gte=start_time), Q(end_date__lte=end_time)) #Checking if there's any availability between a certain period of time at a certain arena            
        serialized = ScheduleSerializer(slots, many=True)
        return Response({
            'success': False,
            'response': serialized.data #empty array
        })
    except Availability.DoesNotExist:
        ... #Some Code
现在我在django视图中使用它,如下所示:

class Availability(models.Model):
    arena = models.ForeignKey(Arena, null=True)
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()
    token = UUIDField(auto=True, unique=True, null=True)
    validity = models.DateTimeField(null=True)
def post(self, request):
    data = request.DATA
    arena = data['arena']
    start_time = datetime.datetime.strptime(data['start_time'], '%d/%m/%Y %H:%M')
    end_time = datetime.datetime.strptime(data['end_time'], '%d/%m/%Y %H:%M')
    try:
        slots = Availability.objects.filter(Q(arena__id=arena), Q(start_date__gte=start_time), Q(end_date__lte=end_time)) #Checking if there's any availability between a certain period of time at a certain arena            
        serialized = ScheduleSerializer(slots, many=True)
        return Response({
            'success': False,
            'response': serialized.data #empty array
        })
    except Availability.DoesNotExist:
        ... #Some Code

我的Availability表中没有对象,但是上面的查询被执行并返回一个空数组作为响应。我的问题对吗?如果没有,我该如何修复此问题?

这似乎按预期工作。您正在执行查询,但找不到与查询匹配的对象(因为没有对象)。试着这样做:

slots = Availability.objects.filter(Q(arena__id=arena), Q(start_date__gte=start_time), Q(end_date__lte=end_time)) #Checking if there's any availability between a certain period of time at a certain arena

if slots:            
    serialized = ScheduleSerializer(slots, many=True)
    return Response({
        'success': False,
        'response': serialized.data #empty array
    })
else:
    ...

这就是
过滤器的工作原理;它返回一个queryset,如果没有找到匹配项,则该queryset可以为空
get
引发
DoesNotExist
,但它用于获取一个实例。您可以检查插槽的
len
,如果插槽为空,则应用您想要应用的任何条件。我们还可以使用
.exists()
检查插槽是否为空。如果需要,我们可以提出DoesNotExist错误或其他错误。