2015-12-02 122 views
0

我有我的数据库与该值的用户:Django的 - 查询字符串精确匹配

booking_id -> 25DgW 

此字段在我的模型标记为unique

booking_id = models.CharField(null=False, unique=True, max_length=5, default=set_booking_id) 

但现在当我查询了用户是这样的:

>>> User.objects.get(booking_id='25dgw') # I think this should throw a DoesNotExist exacption 
<User: John Doe> 

即使我做的:

>>> Partner.objects.get(booking_id__exact='25dgw') 
<User: John Doe> 

我需要一个查询,只有当代码的写入方式与保存在数据库中的方式完全相同时,才会返回用户:25DgW而不是25dgw

我该如何查询?

+0

万一你不知道,这是MySQL的问题。使用ORM来实现这一点并不容易。原始的sql可能会这样做:http://stackoverflow.com/questions/7857669/mysql-case-sensitive-query –

+0

@ShangWang所以'__exact'是什么?有没有办法(很难而且不容易)做到这一点? – Gocht

+1

将您的mysql归类更改为区分大小写。 '__exact'意味着Django应该告诉数据库你需要完全匹配。数据库排序规则设置数据库是否应该考虑'bob'和'Bob'完全匹配。 http://stackoverflow.com/questions/5629111/how-can-i-make-sql-case-sensitive-string-comparison-on-mysql显示了一些方法来做到这一点,但它是一个很大的话题。 –

回答

0

这似乎工作:

qs.filter(booking_id__contains='25DgW').first()