Я добавляю некоторое поведение профиля пользователя в приложение Django, и, как обычно, я хотел бы ограничить возможность пользователей взаимодействовать только с их собственными данными.Эти вопросы и ответы относятся к самому процессу:
Django --- Разрешение пользователям редактировать только свой профиль
Достаточно ли добавить аутентифицированный идентификатор пользователя всоздавать, обновлять и удалять запросы?Чтобы уменьшить дублирование кода, я подумал, что мог бы написать миксин, который переопределил бы get_object
или get_queryset
и перехватил бы запрос, добавив self.request.user.pk
для фильтрации результатов?
Существуют ли другие эффективные методыдля этого или миксины из самого Django?
edit Это то, о чем я думал:
class OwnersDataOnlyViewMixin(object):
def get_object(self, queryset=None):
if self.model == get_user_model():
# user model, so pk of model should match self.request.user.pk
return super().get_object(self.model.objects.filter(pk=self.request.user.pk))
else:
# different model
try:
# check for the 'user' field and filter on it if found
user_field = self.model._meta.get_field('user')
return super().get_object(self.model.objects.filter(user=self.request.user))
except:
# Mixin was used with model data not associated with a user
raise self.model.DoesNotExist
Возможно, есть более гибкиеспособы сделать это, и я открыт для предложений по улучшению этого.