Форум сайта python.su
Здравствуйте!
Делаю афишу
Модель такая:
class Date(models.Model): date = models.DateTimeField(u'Дата', unique=True) class Event(models.Model): user = models.ForeignKey(User, verbose_name=u'Пользователь') name = models.CharField(u'Название', max_length=100) dates = models.ManyToManyField(Date, verbose_name=u'Даты') #остальные поля
def events(request, category=None): now = datetime.datetime.now() events = Event.objects if category: category = get_object_or_404(Category, uid=category) events = events.filter(category=category) # собственно вопрос здесь: # т.к у меня many-to-many мне нужно убрать повторяющиеся события, # и оставить события которые уже проходят или только начнуться # я сделал так: events_list = [] for event in events.filter(dates__date__gte=now): if event not in events_list: events_list.append(event) events = events_list
Офлайн
events.filter(dates__date__gte=now).distinct()
Офлайн
reclosedev
Если использовать .distinct(), то выводит события которые только начнутся (dates__date__gte=now)
А нужно вывести события которые уже проходят или только начнуться
Офлайн
andreiru
events = Event.objects
events = Event.objects.prefetch_related()
andreiruВыбрать, которые сегодня проходят устроит?
которые уже проходят
now = datetime.date.today()
events.filter(dates__date__gte=now).distinct()
andreiruВ течении какого времени? Час, Два, Шесть, 12, 20?
которые уже проходят
Офлайн
andreiruУ Вас в коде тоже самое вроде.
Если использовать .distinct(), то выводит события которые только начнутся (dates__date__gte=now)
Antonio051Кстати, может лучше хранить время начала и время окончания события?
В течении какого времени? Час, Два, Шесть, 12, 20?
Офлайн
Нужно выводить события как у меня сейчас http://24events.ru/
(которые уже проходят и только начнутся)
Antonio051Которые уже проходят в течении какого времени?
В течении какого времени? Час, Два, Шесть, 12, 20?
Офлайн
Спасибо! Сделал так:
def events(request, category=None): now = datetime.datetime.now() events = Event.objects.prefetch_related() if category: category = get_object_or_404(Category, uid=category) events = events.filter(category=category) events = events.filter( dates__date__range=(now, now + datetime.timedelta(days=365)) ).order_by().distinct()
Офлайн
events = events.distinct().filter(
dates__date__range=(now, now + datetime.timedelta(days=365))
).order_by('XXXXX')
Офлайн
Если так:
events = events.distinct().filter( dates__date__range=(now, now + datetime.timedelta(days=365)) ).order_by('dates__date')
Офлайн
В оф доке по distinct написано, что использование вместе с order_by может привести к неожиданным результатам с дублированием записей. Попробуйте сначала сделать distinct, а потом отсортировать
Офлайн