Фон
Я разрабатываю приложение 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? Второй подход потребует ненужного избыточности, первый, вероятно, потребует ненужных накладных расходов...
Если я собираюсь сбиться с пути, пожалуйста, не стесняйтесь указывать мне в правильном направлении. Заранее благодарим за любую помощь.