Python 在两个日期之间过滤,但逻辑相反
我正在做一个搜索,如果一个“音乐家”在两个日期(开始日期、结束日期)之间有空,应该能够进行过滤。音乐家有一个日历,上面有他的演出日期。 因此,当用户输入他想要预订音乐家的两个日期时,我应该看看音乐家是否在这两个日期之间的至少一个日期上没有演出。我使用的是djagno filter,使用的是.filter()和.exclude(),我可以进行筛选,但它排除了范围内只有一场演出的音乐家,所以显然这是错误的。我有一段代码:Python 在两个日期之间过滤,但逻辑相反,python,django,date,search,filter,Python,Django,Date,Search,Filter,我正在做一个搜索,如果一个“音乐家”在两个日期(开始日期、结束日期)之间有空,应该能够进行过滤。音乐家有一个日历,上面有他的演出日期。 因此,当用户输入他想要预订音乐家的两个日期时,我应该看看音乐家是否在这两个日期之间的至少一个日期上没有演出。我使用的是djagno filter,使用的是.filter()和.exclude(),我可以进行筛选,但它排除了范围内只有一场演出的音乐家,所以显然这是错误的。我有一段代码: def _filter_start_date_end_date(sel
def _filter_start_date_end_date(self, queryset):
queryset = queryset.exclude(shows__performance_date__range=[self.filter_parameters['start_date'],
self.filter_parameters['end_date']])
return queryset
queryset包含数据库中的所有音乐家。
显示模型:
class Show(models.Model):
id = models.AutoField(primary_key=True)
musician = models.ForeignKey(Musician, on_delete=models.CASCADE, related_name='shows')
additional_musicians = models.CharField(max_length=200, blank=True, null=True)
genres = models.ManyToManyField('Genres', blank=True)
performance_date = models.DateField()
performance_start = models.TimeField()
performance_end = models.TimeField()
我希望我问的问题是正确的,如果需要更多信息,我会提供。试试这个:
import datetime
def daterange(d1, d2):
return (d1 + datetime.timedelta(days=i) for i in range((d2 - d1).days + 1))
start_date = self.filter_parameters['start_date']
end_date = self.filter_parameters['end_date']
free_slots = []
for each_date in daterange(start_date, end_date):
shows = queryset.filter(
shows__performance_date=each_date)
if not shows:
free_slots.append(each_date)
return free_slots # List of available dates