我正在尝试根据模型中当前的预订金额返回表单的日期列表。
当前阈值设置为6,因此如果已经存在6个预订,则会将其从可用日期列表中排除。
这是我当前的代码
def get_available_dates():
dates = next_x_months(12)
weds = [last_wednesday(year, month) for year, month in dates]
choices = list()
for i, wed in enumerate(weds):
booking_total = Booking.objects.filter(booking_date=wed)
total = booking_total.count()
if total >= 6:
weds.pop(i)
else:
choices.append((wed, wed,))
return choices
class BookingForm(forms.ModelForm):
booking_choice = forms.ChoiceField(choices=get_available_dates())
...
weds
返回以下内容:
[datetime.date(2018, 1, 31), datetime.date(2018, 2, 28), datetime.date(2018, 3, 28), datetime.date(2018, 4, 25), datetime.date(2018, 5, 30), datetime.date(2018, 6, 27), datetime.date(2018, 7, 25), datetime.date(2018, 8, 29), datetime.date(2018, 9, 26), datetime.date(2018, 10, 31), datetime.date(2018, 11, 28), datetime.date(2018, 12, 26)]
现在,我的模型中有一些测试数据。 31/1/2018
有6个条目,28/2/2018
有2个条目。
但是,get_available_dates()
返回的内容会丢弃31/1/2018
日期(应该如此),但也会删除28/2/2018
,这不应该是requests
。我觉得我在这里遗漏了一些明显的东西。
答案 0 :(得分:0)
斯蒂芬强调。事实证明,通过修改循环内部的循环变量,我得到了不受欢迎的行为。 (在我的辩护中,它是凌晨3点,我应该知道的更好)。
修改循环内部的循环变量会导致索引移位,因为它是已删除的循环变量中的第一个项目,第二个日期在此情况下为28/2/2018
然后转移到索引{{ 1}}和索引0
变为1
,然后迭代时间为28/3/2018
,此转换导致输出跳过索引1
。
0
上述代码解决了这个问题。