Как создать дату из года и месяца (IntergerFields в Django Form)
У меня есть выбор в Django Form на основе года и месяца (как целочисленные поля) и я хотел бы создать и сохранить также значение Date (первый день определенного месяца и года), чтобы связать его с другой таблицей.
Моя функция в forms.py:
def date_creation(year, month):
if year and month:
y = str(year)
m = str(month)
if len(m) == 1:
m = "0"+ m
entry = f"{y}-{m}-01 00:00:01"
date1 = datetime.strptime(entry, '%Y-%m-%d %H:%M:%S')
date2 = date1.strftime('%Y-%m-%d')
return date2
else:
return 0
models.py
class MonthlyCosts(models.Model):
y = int(date.today().year)
y1 = y - 1
y2 = y - 2
year_selection = (
(y, y),
(y1, y1),
(y2, y2),
)
months_selection = (
(1, 'January'),
(2, 'February'),
(3, 'March'),
(4, 'April'),
(5, 'May'),
(6, 'June'),
(7, 'July'),
(8, 'August'),
(9, 'September'),
(10, 'October'),
(11, 'November'),
(12, 'December')
)
year = models.IntegerField("Year", choices=year_selection)
month = models.IntegerField("Month", choices=months_selection)
date = models.DateField("Date", null=True, blank=True)
Когда я попробовал функцию выше в моей форме, я получил следующую ошибку:
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: данные времени '<django.forms.fields.IntegerField object at 0x102c521c0>-<django.forms.fields.IntegerField object at 0x102c52280>-01 00:00:01' не соответствуют формату '%Y-%m-%d %H:%M:%S
Большое спасибо за помощь, L.
Это потому, что вы передаете formfieds в свою функцию date_creation
. Вы должны сделать это в методе сохранения формы (предполагается, что это ModelForm):
def save(self, commit=True):
year = self.cleaned_data['year']
month = self.cleaned_data['month']
self.instance.date = date_creation(year, month)
return super(MonthlyCostsForm, self).save(commit)