[英]how to convert a range of dates to fill in for a drop down list in django
class Trade(models.Model):
user_id = models.CharField(max_length=5, null=True, blank=True)
nse_index = models.ForeignKey('NseIndex', on_delete=models.CASCADE)
trade_expiry = models.DateField(default=THURSDAYS[0], choices=THURSDAYS)
trade_type = models.CharField(max_length=25, choices=TRADE_TYPE, default="paper")
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
我需要將 trade_expiry(一年中的所有星期四)顯示為一個元組,以使用 Django 在表單上顯示為下拉列表。
這可以通過列表理解來完成,這樣的事情是可能的:
def all_specific_days(year, day):
d = datetime.date(year, 1, 1)
d += datetime.timedelta(days= d.weekday() - day)
days = []
while d.year == year:
days.append(d)
d += datetime.timedelta(days=7)
return days
THURSDAYS = all_specific_days(2023, 3)
THURSDAYS_CHOICES = [(i, d) for i, d in enumerate(THURSDAYS)]
這將返回一個如下所示的列表:
[(0, datetime.date(2023, 1, 4)), (1, datetime.date(2023, 1, 11)),
...(51, datetime.date(2023, 12, 27))]
我希望這對你有幫助,你甚至可以指定你想要哪一年哪一天。 記住星期一 = 0 和星期日 = 6,所以星期四 = 3。
編輯:
THURSDAYS_CHOICES = [(i, str(d)) for i, d in enumerate(THURSDAYS)]
將返回一個列表,其中包含日期的字符串表示形式 ->
[(0, '2023-01-04'), (1, '2023-01-11'), (2, '2023-01-18')...
..., (51, '2023-12-27')]
我會寫一個表格,即像這樣的東西:
class SelectOperatorChoiceForm(forms.Form):
operator_select = forms.ModelChoiceField(queryset=None, label="choose the operator:")
def __init__(self, operators, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['operator_select'].queryset = operators
就我而言,在創建表單實例時,運算符是一個查詢集。 我認為您可以輕松地使這段代碼適應您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.