Django переопределяет менеджеры по умолчанию для моделей contrib
 У меня есть приложение Django с именем site_settings, в котором определена модель SiteSettings. Эта модель содержит внешний ключ к модели django.contrib.sites.models.Site. Теперь я хочу переопределить менеджер по умолчанию objects модели Site новым, который я определил:
from django.contrib.sites.models import SiteManager as _OrigSiteManager
class SiteManager(_OrigSiteManager):
    ...
Я пытался:
Site.add_to_class("objects", SiteManager())
 Но это не сработало. Проблема в том, что я добавляю в класс с уже существующим именем objects. При добавлении с другим именем все работает как ожидалось:
Site.add_to_class("my_objects", SiteManager())  # now Site.my_objects points to my custom manager
 Но я хочу переопределить существующий менеджер objects своим пользовательским менеджером. Как я могу это сделать? 
Вы можете переопределить и использовать свой собственный класс Site везде:
from django.contrib.sites.models import Site
    class Site(Site):
        ...
        objects = SiteManager()
 или вы можете использовать contribute_to_class:
from django.contrib.sites.models import Site
SiteManager().contribute_to_class(Site, 'objects')
или вы можете сделать обезьяний патч:
from django.contrib.sites.models import Site
Site.objects = SiteManager(model=Site)
Если вам нужно только изменить queryset в foreignkey на Site, вы можете использовать limit_choices_to:
foreignkey(Site, limit_choices_to=Q(your query to limit sites queryset))