#django #django-filter
Вопрос:
Я ищу элегантный способ выполнить запрос в Django на SQLite и получить только один результат, если имеется несколько строк с одинаковым содержимым.
Мой пример:
У меня есть несколько временных интервалов, которые я моделирую следующим образом:
class Slots(models.Model):
year = models.IntegerField(_("Year"), blank=False)
month = models.IntegerField(_("Month"), blank=False)
day = models.IntegerField(_("Day"), blank=False)
hour = models.IntegerField(_("Hour"), blank=False)
block = models.IntegerField(_("Block"), blank=False)
date = models.DateTimeField(_("DateTimeField"), blank=False)
Предположим, у меня есть две записи с:
year = 2021
month = 4
day = 22
hour = 15
block = 0
date = DateTimeField(2012/04/22,15:00:00)
И один:
year = 2021
month = 4
day = 22
hour = 16
block = 0
date = DateTimeField(2012/04/22,16:00:00)
Когда я делаю:
Slots.objects.filter(year=2021, month=4, day=22)
Я получаю три записи, но мне нужна только одна на 15:00, если условие соответствует.
Ответ №1:
Просто добавьте [1] после запроса, такого как Slots.objects.filter()[1]
Комментарии:
1. Это дает мне только первый ряд, мне нужно сгруппироваться.
2. сначала вы просите только один результат («Я получаю три записи, но мне нужна только одна»), теперь вы хотите сгруппировать по . сгруппировать по чему именно?
3. Извините за путаницу. Группируйте По годам, месяцам, дням, блокам
Ответ №2:
Вы можете использовать первый() метод Django ORM (см. Официальные документы) следующим образом:
slot = Slots.objects.filter(year=2021, month=4, day=22, hour=15, block=0).first()
if slot is None:
# handle it
...
Комментарии:
1. Это дает мне только первый ряд. К сожалению, мне нужна группа.