Фон
Я разрабатываю приложение 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
(возможно, с каким-то конкретным именем, например, «владелец»).
При создании нового vacation.Rental
значение поля ForeignKey
будет принудительно установлено для идентификатора текущего пользователя. Поле ForeignKey
не будет отображаться в форме.
В списках проката будут отображаться только прокаты с ForeignKey
, соответствующим текущему пользователю.
При изменении арендной платы будут отображаться только арендные платы с ForeignKey
, соответствующим текущему пользователю. Поле ForeignKey
не будет отображаться в форме.
Конечно, это должно работать для любой модели, имеющей соответствующее поле ForeignKey
, а не только для нашей vacation.Rental
модели.
Это звучит пока осуществимо, или я должен идти в другом направлении?
Осложнения
Теперь вот сложная часть; Я не уверен, как справиться с этим. Допустим, у Rental
может быть много «RentalPhotos». RentalPhoto
имеет от ForeignKey
до Rental
. Пользователи должны иметь возможность добавлять фотографии в свою аренду. Тем не менее, на фотографиях нет пользователя ForeignKey
, поэтому невозможно напрямую узнать, кому принадлежит фотография.
Может ли это быть решено с помощью некоторой хитрости в рамках, следуя ForeignKey
с, пока объект не будет найден с ForeignKey
для пользователя? Или я должен выбрать легкий путь и дать RentalPhoto
(и все остальное, «принадлежащее» Rental
) свое собственное ForeignKey
соответствующему auth.User
? Второй подход вызвал бы ненужную избыточность, первый, вероятно, потребовал бы ненужных накладных расходов на обработку ...
Если я полностью сбился с пути, пожалуйста, не стесняйтесь указывать мне в правильном направлении. Заранее благодарен за любую помощь.