django filters open_hours close_hours SyntaxError: positional argument follows keyword argument
django filters open_hours close_hours SyntaxError: positional argument follows keyword argument
我试图制作过滤器方法来检查我的地点(模型在下面)现在是否开放。我定义了字段 open_hours 和 close_hours。算法对我来说看起来很好(第一个条件适用于 21:00-23:00 小时和第二个 21:00-01:00)但是因为我是 Q 和 F 对象中的新手,所以我得到了 syntaxError。
第 81 行
Q(open_hours__lt = current_time) & Q(close_hours__gt = current_time))
^
语法错误:位置参数跟随关键字参数
class Place(models.Model):
name = models.CharField(max_length=50)
lat = models.FloatField()
lng = models.FloatField()
address = models.CharField(max_length=50)
district = models.CharField(max_length=50, choices=DISTRICTS)
link = models.URLField(help_text="www.websiteurl.pl")
open_hours = models.TimeField()
close_hours = models.TimeField()
week_day = MultiSelectField(choices=DAYS)
additionalInfo = models.CharField(max_length=500, blank=True, null=True)
def __str__(self):
return self.name
def hasToBeOpenedRightNowFilter(self, queryset, name, value):
now = datetime.datetime.now()
current_day = now.strftime("%A") #current_day
current_time = now.time() #current_time
queryset_day = queryset.filter(week_day__contains = current_day) #queryset filtered after day
query_time_1 = queryset.filter(open_hours__lt = F('close_hours'), #queryset filtered after first condition
Q(open_hours__lt = current_time) & Q(close_hours__gt = current_time))
query_time_2 = queryset.filter(open_hours__gt = F('close_hours'), #queryset filtered after second condition
Q(open_hours__lt = current_time) | Q(close_hours__gt = current_time))
queryset_time = query_time_1 | query_time_2 #merge two querysets with time conditions
queryset_true = queryset_time & queryset_day #merge queryset with filter after day
if not value:
queryset = queryset.exclude(id__in=queryset_true.values('id'))
return queryset
return queryset_true
您需要将 Q 对象放在 .filter
的第一位
query_time_1 = queryset.filter(Q(open_hours__lt = current_time) & Q(close_hours__gt = current_time), open_hours__lt = F('close_hours'))
我试图制作过滤器方法来检查我的地点(模型在下面)现在是否开放。我定义了字段 open_hours 和 close_hours。算法对我来说看起来很好(第一个条件适用于 21:00-23:00 小时和第二个 21:00-01:00)但是因为我是 Q 和 F 对象中的新手,所以我得到了 syntaxError。
第 81 行 Q(open_hours__lt = current_time) & Q(close_hours__gt = current_time)) ^ 语法错误:位置参数跟随关键字参数
class Place(models.Model):
name = models.CharField(max_length=50)
lat = models.FloatField()
lng = models.FloatField()
address = models.CharField(max_length=50)
district = models.CharField(max_length=50, choices=DISTRICTS)
link = models.URLField(help_text="www.websiteurl.pl")
open_hours = models.TimeField()
close_hours = models.TimeField()
week_day = MultiSelectField(choices=DAYS)
additionalInfo = models.CharField(max_length=500, blank=True, null=True)
def __str__(self):
return self.name
def hasToBeOpenedRightNowFilter(self, queryset, name, value):
now = datetime.datetime.now()
current_day = now.strftime("%A") #current_day
current_time = now.time() #current_time
queryset_day = queryset.filter(week_day__contains = current_day) #queryset filtered after day
query_time_1 = queryset.filter(open_hours__lt = F('close_hours'), #queryset filtered after first condition
Q(open_hours__lt = current_time) & Q(close_hours__gt = current_time))
query_time_2 = queryset.filter(open_hours__gt = F('close_hours'), #queryset filtered after second condition
Q(open_hours__lt = current_time) | Q(close_hours__gt = current_time))
queryset_time = query_time_1 | query_time_2 #merge two querysets with time conditions
queryset_true = queryset_time & queryset_day #merge queryset with filter after day
if not value:
queryset = queryset.exclude(id__in=queryset_true.values('id'))
return queryset
return queryset_true
您需要将 Q 对象放在 .filter
query_time_1 = queryset.filter(Q(open_hours__lt = current_time) & Q(close_hours__gt = current_time), open_hours__lt = F('close_hours'))