简体   繁体   English

如何转换日期范围以填写 django 中的下拉列表

[英]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)

I need to display the trade_expiry(all thursdays in a year) as a tuple to be displayed as a dropdown list on a form using Django.我需要将 trade_expiry(一年中的所有星期四)显示为一个元组,以使用 Django 在表单上显示为下拉列表。

This can be done with a list comprehension, something like this is possible:这可以通过列表理解来完成,这样的事情是可能的:

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)]

This will return a list which looks like the following:这将返回一个如下所示的列表:

[(0, datetime.date(2023, 1, 4)), (1, datetime.date(2023, 1, 11)),
...(51, datetime.date(2023, 12, 27))]

I hope this helps you out, with this you can even specify which year and which day you want.我希望这对你有帮助,你甚至可以指定你想要哪一年哪一天。 Remember Monday = 0 and Sunday = 6, so Thursday = 3.记住星期一 = 0 和星期日 = 6,所以星期四 = 3。

EDIT:编辑:

THURSDAYS_CHOICES = [(i, str(d)) for i, d in enumerate(THURSDAYS)]

Will give back a list with the string representation of a date ->将返回一个列表,其中包含日期的字符串表示形式 ->

[(0, '2023-01-04'), (1, '2023-01-11'), (2, '2023-01-18')... 
..., (51, '2023-12-27')]

I would write a Form, ie something like this:我会写一个表格,即像这样的东西:

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  

in my case, when creating an instance of the form, operators is a queryset.就我而言,在创建表单实例时,运算符是一个查询集。 I think you can adapt easily this code to your problem.我认为您可以轻松地使这段代码适应您的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM