Таможенные менеджеры и "через" - PullRequest
1 голос
/ 24 июня 2009

У меня есть отношение многие ко многим в моем приложении django, где я довольно сильно использую метод «add» менеджера (т.е. album.photos.add ()).

Мне сейчас нужно хранить некоторые данные об отношении «многие ко многим», но я не хочу терять метод add. Могу ли я просто установить значение по умолчанию для всех дополнительных полей в сквозной модели и каким-то образом повторно реализовать метод add?

Я не особо разбираюсь в пользовательских менеджерах, но подозреваю, что это было бы подходящее место для поиска.

Обновление:

Читал о пользовательских менеджерах . Может быть, я могу просто запретить добавление / удаление / etc, когда добавляю аргумент "through" в свое поле "многие ко многим"?

Кто-нибудь знает, как это сделать?

1 Ответ

2 голосов
/ 25 июня 2009

Самый простой способ - просто добавить в альбом метод (т.е. album.add_photo ()), который обрабатывает метаданные и вручную создает правильно связанный экземпляр Photo.

Если вы хотите получить все фанки, вы можете написать собственный менеджер для фотографий, сделать его по умолчанию (т.е. первый назначенный менеджер), установить use_for_related_fields = True и добавить его ( ) метод, который может правильно установить метаданные по умолчанию для отношения.

В сторону: кажется, что Django не составит большого труда сделать это универсальным; вместо удаления метода add () при наличии сквозной таблицы просто заставьте add () принимать произвольные kwargs и рассматривать их как данные для сквозной таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...