Получите только одну строку, если в Django — SQLite существует несколько строк с одинаковыми учетными данными

#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. Это дает мне только первый ряд. К сожалению, мне нужна группа.