В обход менеджера смежной области / направляющего заместителя менеджера
В моей модели (допустим, класс "A") есть два менеджера - один по умолчанию (objects), который скрывает некоторые объекты (применяет фильтр, допустим, по полю hidden = models.BooleanField) и второй, который показывает только объекты, отфильтрованные по умолчанию (то есть применяет противоположный фильтр). Таким образом, они являются взаимоисключающими.
Я сделал это специально, потому что я не хочу задействовать эти отфильтрованные объекты в интерфейсе администратора.
Пока все хорошо, все работает. Проблема у меня со связанными полями. У меня есть вторая модель, в которой я ссылаюсь на первую (с этими двумя менеджерами) как на поле ManyToMany.
class B(models.Model):
object_a = models.ManyToMany()
Теперь в логике я создаю несколько объектов экземпляра A с hidden = True (таким образом, невидимых для менеджера объектов класса A по умолчанию). И присваиваю эти объекты экземпляру класса B.
instance_b.object_a.add(instance_a.hidden_object_a)
Теперь я подумал, что это не работает, потому что instance_b.object_a.all() возвращает пустой результат запроса. Но потом я понял, что также применяется менеджер по умолчанию, поэтому запрос фильтруется. И на самом деле, есть скрытые объекты, назначенные на instance_b.object_a, просто они не могут быть возвращены такой ссылкой. Как я могу обратиться к ним изнутри экземпляра B? Или как я могу обратиться к другому менеджеру класса A, обратившись через поле ManyToMany? Возможно ли это? Или мне нужен обходной путь?
Ок, нашел. instance_b.object_a(manager='other_manager').all()
>