在 models.py 中向日期字段添加 x 天数
Adding x number of days to a datefield in models.py
我正在尝试弄清楚如何将 x 天数添加到 Models.py 中的字段。我在 Stack Overflow 上阅读了很多帖子(例如这篇 )和 docs.djangoproject.com.
据我了解,最好的方法是重写保存方法。但我无法让它工作。从 MeetingSetting 我尝试从选定的日期获取一个整数。然后将此数字添加到 MeetingDataLED 中的 led_date。
这是我的 models.py
from django.db import models
from datetime import datetime, time, timedelta
# Create your models here.
class MeetingSetting(models.Model):
class Weekdagen(models.IntegerChoices):
MONDAY = 0
TUESDAY = 1
WEDNESSDAY = 2
THURSDAY = 3
FRIDAY = 4
SATERDAY = 5
SUNDAY = 6
meeting_time_led = models.TimeField()
meeting_time_wt = models.TimeField()
meeting_day_led = models.IntegerField(choices=Weekdagen.choices)
meeting_day_wt = models.IntegerField(choices=Weekdagen.choices)
class MeetingDataLED(models.Model):
led_date = models.DateField(primary_key=True)
led_meeting_date = models.DateField(blank=True)
led_start_time = models.TimeField()
led_type_of_meeting = {
('GBS', 'Special one'),
('KO', 'Special two'),
('NM', 'Special three'),
}
led_meeting_type = models.CharField(max_length=3, choices=led_type_of_meeting)
def save(self, *args, **kwargs):
from datetime import datetime, timedelta
d = timedelta(days=MeetingSetting.meeting_day_led(id=1))
self.led_meeting_date = self.led_date() + d
super(MeetingDataLED, self).save(*args, **kwargs)
当我转到管理页面并尝试提交一些数据时,出现以下错误:
“'DeferredAttribute' 对象不可调用”
当我改变
d = timedelta(days=MeetingSetting.meeting_day_led(id=1))
至
d = timedelta(days=3)
我收到错误:
“'datetime.date' 对象不可调用”
我不知道该怎么办。如果有人能指出正确的方向,我将不胜感激。
这里有两个问题。第一个是你不能像那样使用 .meeting_day_led(…)
,你获取对象,然后获取属性。第二个是你不应该调用self.led_date<s>()</s>
,那是一个属性.因此,您可以将其重写为:
from datetime import datetime, timedelta
# …
def save(self, *args, **kwargs):
d = timedelta(days=MeetingSetting<strong>.objects.get(id=1).meeting_day_led</strong>)
self.led_meeting_date = <strong>self.led_date + d</strong>
super().save(*args, **kwargs)
也就是说,对主键进行硬编码不是一个好主意:您无法保证 MeetingSetting
甚至会有这样的主键。
我正在尝试弄清楚如何将 x 天数添加到 Models.py 中的字段。我在 Stack Overflow 上阅读了很多帖子(例如这篇
据我了解,最好的方法是重写保存方法。但我无法让它工作。从 MeetingSetting 我尝试从选定的日期获取一个整数。然后将此数字添加到 MeetingDataLED 中的 led_date。
这是我的 models.py
from django.db import models
from datetime import datetime, time, timedelta
# Create your models here.
class MeetingSetting(models.Model):
class Weekdagen(models.IntegerChoices):
MONDAY = 0
TUESDAY = 1
WEDNESSDAY = 2
THURSDAY = 3
FRIDAY = 4
SATERDAY = 5
SUNDAY = 6
meeting_time_led = models.TimeField()
meeting_time_wt = models.TimeField()
meeting_day_led = models.IntegerField(choices=Weekdagen.choices)
meeting_day_wt = models.IntegerField(choices=Weekdagen.choices)
class MeetingDataLED(models.Model):
led_date = models.DateField(primary_key=True)
led_meeting_date = models.DateField(blank=True)
led_start_time = models.TimeField()
led_type_of_meeting = {
('GBS', 'Special one'),
('KO', 'Special two'),
('NM', 'Special three'),
}
led_meeting_type = models.CharField(max_length=3, choices=led_type_of_meeting)
def save(self, *args, **kwargs):
from datetime import datetime, timedelta
d = timedelta(days=MeetingSetting.meeting_day_led(id=1))
self.led_meeting_date = self.led_date() + d
super(MeetingDataLED, self).save(*args, **kwargs)
当我转到管理页面并尝试提交一些数据时,出现以下错误: “'DeferredAttribute' 对象不可调用”
当我改变
d = timedelta(days=MeetingSetting.meeting_day_led(id=1))
至
d = timedelta(days=3)
我收到错误: “'datetime.date' 对象不可调用”
我不知道该怎么办。如果有人能指出正确的方向,我将不胜感激。
这里有两个问题。第一个是你不能像那样使用 .meeting_day_led(…)
,你获取对象,然后获取属性。第二个是你不应该调用self.led_date<s>()</s>
,那是一个属性.因此,您可以将其重写为:
from datetime import datetime, timedelta
# …
def save(self, *args, **kwargs):
d = timedelta(days=MeetingSetting<strong>.objects.get(id=1).meeting_day_led</strong>)
self.led_meeting_date = <strong>self.led_date + d</strong>
super().save(*args, **kwargs)
也就是说,对主键进行硬编码不是一个好主意:您无法保证 MeetingSetting
甚至会有这样的主键。