动态选择字段,排除超过一定数量条目的对象

时间:2018-01-24 03:26:20

标签: python django django-forms

我正在尝试根据模型中当前的预订金额返回表单的日期列表。

当前阈值设置为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。我觉得我在这里遗漏了一些明显的东西。

1 个答案:

答案 0 :(得分:0)

斯蒂芬强调。事实证明,通过修改循环内部的循环变量,我得到了不受欢迎的行为。 (在我的辩护中,它是凌晨3点,我应该知道的更好)。

修改循环内部的循环变量会导致索引移位,因为它是已删除的循环变量中的第一个项目,第二个日期在此情况下为28/2/2018然后转移到索引{{ 1}}和索引0变为1,然后迭代时间为28/3/2018,此转换导致输出跳过索引1

0

上述代码解决了这个问题。