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错误或其他错误。