В настоящее время я создаю много видов, и на каждом из них только Пользователь имеет права доступа к этому виду, а также к созданию или редактированию модели.
В зависимости от представления я либо помещаю небольшой оператор разрешения IF в get_context_data, либо в get_object.
Хотя следующее работает, я хотел бы сделать его более СУХИМЫМ, так как мне нужно более 20 представлений:
def get_context_data(self, **kwargs):
context = super(SpaceCreate, self).get_context_data(**kwargs)
house = House.objects.get(pk=self.kwargs['pk'])
# CHECK IF USER HAS PERMISSION TO MAKE CHANGES TO THE MODEL
if house.owner != self.request.user:
raise PermissionDenied
или в get_object (), и с дополнительными проверками разрешений:
def get_object(self, *args, **kwargs):
obj = super(SpaceManage, self).get_object()
house = House.objects.get(pk=self.kwargs['pk'])
space = Space.objects.get(pk=self.kwargs['space_pk'])
if space.house.owner != self.request.user and house.pk != space.house.pk:
raise PermissionDenied
return space
Несмотря на то, что я много читал о создании разрешений (https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Authentication), они, похоже, применимы в тех случаях, когда мы хотим, чтобы у многих пользователей было это разрешение вместо проверки, если пользовательимеет разрешение на редактирование моделей, которые они создали.
Другая возможность (на мой взгляд) - использование миксинов, но я не понимаю, как они работают и как их реализовывать.
Я пытаюсь достичь:
Пользователь может создавать, обновлять и удалять только созданные им модели, без повторного использования одного и того же кода.снова и снова в представлениях.
РЕДАКТИРОВАТЬ 1: Основываясь на комментариях @ Lemayzeur, создание Mixin является лучшим подходом для этого.Любые примеры или объяснения были бы очень полезны.