I’m fascinated by this problem. Try this workaround. https://docs.djangoproject.com/en/2.0/ref/models/database-functions/#lower
Register the lookup Lower like so: CharField.register_lookup(Lower, "lower") Then use the contains lookup. doctor.objects.filter(name__lower__contains="joel") From: [email protected] [mailto:[email protected]] On Behalf Of Joel Sent: Friday, August 10, 2018 10:56 AM To: Django users Subject: Unexpected behavior with icontains in query filter I'm trying to do a case insensitive search for a substring within a field in my model. My model: class doctor(models.Model): docid = models.AutoField(primary_key=True, unique=True) # Need autoincrement, unique and primary name = models.CharField(max_length=35) username = models.CharField(max_length=15) regid = models.CharField(max_length=15, default="", blank=True) photo = models.CharField( max_length=35, default="", blank=True) email = models.EmailField(default="", blank=True) phone = models.CharField(max_length=15) qualifications = models.CharField( max_length=50, default="", blank=True) about = models.CharField( max_length=35, default="", blank=True) specialities = models.CharField( max_length=50, default="", blank=True) department = models.CharField(max_length=50, default="ENT", blank=True) fees = models.FloatField(default=300.0) displayfee = models.IntegerField(default=0, blank=True) slotrange = models.CharField(max_length=50, blank=True) slotdurn = models.IntegerField(default=10) breakrange = models.CharField( max_length=50, default="", blank=True) slotsleft = models.CharField( max_length=50, default="", blank=True) def __str__(self): return self.name def Range(self): return self.slotrange def listslots(self): SlotRange = self.slotrange SlotDurn = self.slotdurn startime = SlotRange.split('-')[0] endtime = SlotRange.split('-')[1] sthr, stmin = SplitTimeString(startime) enhr, enmin = SplitTimeString(endtime) print(stamptoday(sthr, stmin)) print(stamptoday(enhr, enmin)) startstamp = stamptoday(sthr, stmin) endstamp = stamptoday(enhr, enmin) secdurn = SlotDurn*60 slotlist = [] for sec in range(startstamp, endstamp, secdurn): enttime = sec + secdurn myrange = ("%s - %s" % (HumanTime(sec), HumanTime(enttime))) slotlist.append(myrange) return slotlist Under the field 'name' in my mysql database, are two rows with values for name as 'Joel' and 'Jaffy Joel'. When I do the search like this: from appointments.models import customer, doctor, appointment doctor.objects.filter(name__icontains='joel') Output: <QuerySet []> But when I do: doctor.objects.filter(name__icontains='Joel') Output: <QuerySet [<doctor: Joel>, <doctor: Jaffy Joel>]> Why isnt the case insensitive search working for a lowercase search? I'm on django 2.0.7 -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]<mailto:[email protected]>. To post to this group, send email to [email protected]<mailto:[email protected]>. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/46579c92-8a12-4977-814c-9c3fcaa14711%40googlegroups.com<https://groups.google.com/d/msgid/django-users/46579c92-8a12-4977-814c-9c3fcaa14711%40googlegroups.com?utm_medium=email&utm_source=footer>. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/c204f799406943208eaabb1ece752054%40ISS1.ISS.LOCAL. For more options, visit https://groups.google.com/d/optout.

