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