При переопределении менеджера моделей у вас есть два варианта. Сначала нужно просто создать новый метод поиска:
class MyModelManager(models.Manager):
def get_by_username(self, username):
return self.get(username__iexact=username)
class MyModel(models.Model):
...
objects = MyModelManager()
Затем вы используете get_by_username('blah')
вместо get(username='blah')
, и вам не нужно беспокоиться о том, чтобы забыть iexact
. Конечно, для этого требуется, чтобы вы не забыли использовать get_by_username
.
Второй вариант гораздо более хакерский и запутанный. Я не решаюсь даже предложить это, но для полноты картины я переопределю filter
и get
так, что если вы забудете iexact
при запросе по имени пользователя, он добавит его для вас.
class MyModelManager(models.Manager):
def filter(self, **kwargs):
if 'username' in kwargs:
kwargs['username__iexact'] = kwargs['username']
del kwargs['username']
return super(MyModelManager, self).filter(**kwargs)
def get(self, **kwargs):
if 'username' in kwargs:
kwargs['username__iexact'] = kwargs['username']
del kwargs['username']
return super(MyModelManager, self).get(**kwargs)
class MyModel(models.Model):
...
objects = MyModelManager()