Код: Выделить всё
class Person(models.Model):
name = models.CharField()
class InactivePeriod(models.Model)
person = models.ForeignKeyField(Person)
start_date = models.DateField()
end_date = models.DateField()
class Template(models.Model):
day = models.CharField() #choices = monday, tuesday, etc...
person = models.ForeignKeyField(Person)
class TheList(models.Model):
person = models.ForeignKeyField(Person)
date = models.DateField(default=datetime.today)
attended = models.BooleanField(default=False)
Проблема в том, что мои пользователи просили, чтобы у них была возможность обозначить кого-то как неактивного на определенный период времени. Если у Person есть связанная запись InactivePeriod, где значение «сегодня» попадает между начальной_датой и конечной_датой этой записи, мое задание cron пропустит этого Person. Я отказался от простого «активного» BooleanField, так как думаю, что им будет проще не запоминать, неактивен кто-то или нет, и не беспокоиться о том, чтобы сообщить другому пользователю, что они отметили кого-то неактивным. .
Мой сценарий по сути:
Код: Выделить всё
def handle(self, *args, **options):
today = datetime.today()
day = str(today.weekday()) #we store this as a string as it is a charfield
is_inactive_today = (Q(person__inactiveperiod__start_date__lte=today) & \
Q(person__inactiveperiod__end_date__gte=today))
attendance_list = []
for t in models.Template.objects.filter(day=day).exclude(is_inactive_today):
attendance_list.append(models.TheList(person=t.person, date=today))
models.TheList.objects.bulk_create(attendance_list)
Можно ли это сделать с помощью ORM или мне нужно написать какую-то логику в цикл for?
Подробнее здесь: https://stackoverflow.com/questions/790 ... date-range