使用Django中的in查询带有字符串列表的IntegerField

时间:2015-03-05 21:39:54

标签: python django

在Django中,如果我有一个IntegerField的模型和使用字符串的查询,那么它足够聪明,可以投射它

class MyClass(Model):
     int_field = IntegerField()

所以我可以做类似

的事情
# x holds '1234'
MyClass.objects.filter(int_field=x)

这很好用。这也可以保证与列表一起使用吗?考虑

# y holds ['1234', '5678']
MyClass.object.filter(int_field__in=y)

这在Django中是否安全?

1 个答案:

答案 0 :(得分:0)

虽然Django可以正确地将字符串转换为整数,但是你总是可以运行for循环来保证安全:

mylist = ['123', '456']
for item in enumerate(mylist):
    try:    
        mylist[item[0]] = int(item[1])
    except:
        continue

现在,如果您要运行print(list),控制台会将[123, 456]打印到控制台中。如您所见,字符串现在是整数。

注意:如果带有任何字母的字符串可能以某种方式进入列表,您始终可以将continue语句替换为raise [error_name_here]语句以保证安全。