История вопроса
Я разрабатываю приложение django для сайта аренды на время отпуска. У него будет два типа пользователей: арендаторы и управляющие недвижимостью.
Я бы хотел, чтобы управляющие недвижимостью могли управлять своей арендуемой недвижимостью в администраторе django. Однако они должны иметь возможность управлять только своей собственностью.
Я понимаю, что администратор django по умолчанию не поддерживает это. Мне интересно, насколько сложно было бы добавить эту функциональность, и, если это возможно, как лучше всего с этим справиться.
Цель
В идеале я представляю, как это работает примерно так:
auth
уже разрешает такие разрешения:
vacation | rental | Can add rental vacation | rental | Can change rental vacation | rental | Can delete rental
Я бы хотел изменить это на что-то вроде:
vacation | rental | Can add any rental vacation | rental | Can change any rental vacation | rental | Can delete any rental vacation | rental | Can add own rental vacation | rental | Can change own rental vacation | rental | Can delete own rental
Возможное решение
Как инфраструктура решит, принадлежит ли аренда (или что-то еще) пользователю? Я думаю, он проверяет класс vacation.Rental
, чтобы узнать, есть ли у него от ForeignKey
до auth.User
(возможно, имеющий какое-то конкретное имя, например 'owner ').
При создании нового отпуска.Аренда
, значение поля ForeignKey
будет принудительно присвоено идентификатору текущего пользователя. Поле ForeignKey
не будет отображаться в форме.
В листинге аренды будут отображаться только арендные платы с ForeignKey
, соответствующие текущему пользователю.
При изменении аренды, будут отображаться только арендные платы с ForeignKey
, совпадающими с текущим пользователем. Поле ForeignKey
не будет отображаться в форме.
Конечно, это должно работать для любой модели, имеющей соответствующее поле ForeignKey
, а не только для нашего отпуск.Аренда
модель.
Звучит ли это пока выполнимо, или мне следует пойти в другом направлении?
Сложности
А теперь самое сложное; Я' Я не знаю, как с этим справиться. Допустим, у Rental
может быть много «RentalPhotos». RentalPhoto
имеет ForeignKey
на Аренда
. Пользователи должны иметь возможность добавлять фотографии в свои взятые напрокат фотографии. Однако у фотографий нет пользователя ForeignKey
, поэтому нет возможности напрямую узнать, кому принадлежит фотография.
Можно ли решить эту проблему с помощью некоторых уловок в структуре, следуя ForeignKey
s, пока не будет найден объект с ForeignKey
пользователю? Или мне следует выбрать более легкий выход и передать RentalPhoto
(и все остальное, «принадлежащее» Rental
) свой собственный ForeignKey
соответствующему автору. Пользователь
? Второй подход потребует ненужной избыточности, первый, вероятно, потребует ненужных накладных расходов на обработку ...
Если я полностью сбился с пути, пожалуйста, не стесняйтесь указать мне правильное направление. Заранее благодарим за любую помощь.