Postgres queries are CaSeSensitivE unlike in MySQL.
When a simple Model.objects.get(field='hello') would get the record.
Using a postgres db you would need to use field__iexact='hello'
Even unique doesn’t work with different cases with standard postgres. That is why django has the CIText Mixin and postgres has the citext extension.
Could be a feature not a bug…
This also affects a field with unique_together set.
The case sensitivity will still come into play.
You can make the field lowercase by overriding the model’s save method:
    def save(self, **kwargs):
        '''Override save to enforce project name is lowercase'''
        self.name = self.name.lower()
        super().save()
But you don’t need to. Juse ensure the field is a CICharField. A case insensitive field.
Ran into another problem:
crowdminder=# create extension citext;
ERROR:  extension "citext" already exists
So citext is already there but when running a django migration I get:
django.db.utils.ProgrammingError: type "citext" does not exist
LINE 1: ...llink" ("id" serial NOT NULL PRIMARY KEY, "email" citext NUL...
So I go into psql:
drop extension citext cascade;
Then the migrate works.
It’s crazy and weird.
If this happens on production, it could certainly cause problems.