Django models 如何构造Django枚举过滤器

Django models 如何构造Django枚举过滤器,django-models,enums,Django Models,Enums,下面是通过匹配枚举类型从数据库中获取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=

下面是通过匹配枚举类型从数据库中获取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。出什么问题了?

尝试按如下方式更改Q过滤器:

qset = Q(type='ABC_ABC')
说明: 在查找中使用时,django需要一个iterable。由于您只提供了一个值,我猜想,它试图迭代字符串'ABC_ABC',这就是您没有得到任何命中的原因

如果您真的想使用in-lookup,这在本例中是无用的,那么您应该在中添加一个逗号来强制创建1元组

qset = Q(type__in=('ABC_ABC',))
进一步思考

由于此查询非常基本,因此使用Q对象是多余的。你只要打个电话就可以了

.filter(type='ABC_ABC')

如果它解决了你的问题,也许你可以把它标记为你选择的答案;