Две модели связаны следующим образом:
class ParentModel(models.Model):
creator = models.ForeignKey(User, related_name='objects')
name = models.CharField(max_length=40)
class ChildModel(models.Model):
parent = models.ForeignKey(ParentModel, related_name='child_objects')
name = models.CharField(max_length=40)
При формировании ViewSet для дочерней модели указываю в permission_classes:
class IsOwner(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return obj.parent.creator == request.user
Методом тыка установлено, что этот класс (помимо SAFE_METHODS) отрабатывает правильно при методе PATCH, но при POST почему-то любой пользователь может создать дочерний объект с родителем, не принадлежащим этому пользователю.
В settings.py в настройках permissions есть только 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
Ткните в доки, что я здесь упустил.