Как определить ближайший предыдущий рабочий день для мероприятия с учетом пользовательских рабочих часов? - PullRequest
2 голосов
/ 15 июня 2011

Для данного Бизнеса с настраиваемыми BusinessHours и Events мне нужно выяснить, как получить ближайший предыдущий рабочий день для каждого события (скажем, за неделю событий). Например, скажем, у Business есть BusinessHours в воскресенье, среду, пятницу и субботу. Учитывая событие, которое начинается в среду, 22 июня 2011 г., в 15:00, как я могу эффективно определить, что воскресенье, 19 июня 2011 г., является ближайшим предыдущим рабочим днем ​​для этого события? Вот модели:

class Business(models.Model):
  name = models.CharField(max_length=50)

class BusinessHours(models.Model):
  """
  I realize there are better ways to store business hours, 
  but this approach is simple and serves my purposes for now.
  However, if another schema solves the problem above more efficiently, 
  feel free to make a suggestion.
  """
  business = models.ForeignKey(Business)
  sunday_open = models.TimeField(blank=True, null=True)
  sunday_close = models.TimeField(blank=True, null=True)
  monday_open = models.TimeField(blank=True, null=True)
  monday_close = models.TimeField(blank=True, null=True)
  ... continue for each day ...

class Event(models.Model):
  business = models.ForeignKey(Business)
  start = models.DateTimeField()
  end = models.DateTimeField()

Я предполагаю, что большая часть работы должна выполняться на python отдельно от Django, поэтому игнорируйте модели Django, если это усложняет решение. Я был бы рад предоставить дополнительную информацию, если это необходимо. Заранее спасибо!

1 Ответ

3 голосов
/ 15 июня 2011

Вы хотите сделать запрос к вашей базе данных, написанной на python. Я хотел бы проверить django docs о том, как делать запросы к базе данных и приложение fieldlookups.

Базовый формат, вероятно, будет выглядеть примерно так:

# Will return a list of dictionary objects for all rows with that foreign key
# Ex: [{'business' : '3', 'monday_open' : someTime, 'monday_close' : someTime...},...]
storeHours = BuisnessHours.objects.values().filter(business = *foreign key*)

# You can also get your even like this
# Ex: [{'business' : '3', 'start' : someTime, 'end' : someTime}, {'business' : '3'...]
storeEvent = Event.objects.values().filter(business = *same foreign key as above*)

* Обратите внимание: если у вас есть разные события, которые вы хотели бы сохранить в магазине, возможно, было бы хорошо иметь столбец «имя» в модели событий, чтобы вы также могли выполнять запросы на основе определенного события. Кроме того, вместо TimeField, попробуйте DateTimeField, чтобы вы тоже могли сохранить дату, если хотите.

После того, как вы вернете свои словари запросов, должно быть просто сгруппировать время начала и окончания в python, чтобы увидеть, какие из них находятся ближе всего к диапазону события. Для этого я бы также взглянул на модуль datetime .

Я бы тоже посмотрел на этот вопрос . Он делает довольно интересные вещи с пониманием списка в формате запроса.

Вероятно, есть более эффективный способ сделать это просто с помощью полевых поисков, хотя я бы тоже посмотрел на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...