Как построить фильтр перечисления Django - PullRequest
0 голосов
/ 07 ноября 2019

Ниже приведено получение 1 записи из базы данных путем сопоставления типа перечисления.

TYPES = (
    ('ABC_ABC', 'abc abc'),
    ('XYZ_XYZ', 'xyz xyz'),
)


class Hello(models.Model):    
  type = models.CharField(max_length=8, choices=TYPES, blank=True)

база данных:

'1', 'ABC_ABC', 'other data'

Набор запросов:

qset = Q(type__in=('ABC_ABC'))
hello = models.Hello.objects.filter(qset)

Вывод:

print('count: {}'.format(hello.count()))

Результат равен 0. Должно быть 1. Что не так?

1 Ответ

1 голос
/ 08 ноября 2019

Попробуйте изменить фильтр Q следующим образом:

qset = Q(type='ABC_ABC')

Пояснения: При использовании поиска in django ожидает итерацию. Я подозреваю, что поскольку вы указали только одно значение, он пытался перебрать строку 'ABC_ABC', поэтому вы не получили никакого попадания.

Если вы действительно хотите использовать поиск в поиске, который бесполезенв этом случае вы должны добавить запятую для создания 1-кортежа.

qset = Q(type__in=('ABC_ABC',))

Дальнейшие мысли

Поскольку этот запрос довольно прост, использованиеQ объект лишний. Вы можете просто позвонить

.filter(type='ABC_ABC')
...