DRF - Запретить пользователям ссылаться на объекты, которые им не принадлежат

У меня есть две такие модели с отношением родитель-ребенок:

models.py

class Bank(...):
    user = models.ForeignKey('User', ...)

class Account(...)
    bank = models.ForeignKey('Bank', ...)
    user = models.ForeignKey('User', ...)

Я использую DRF и хочу предоставить API-доступ к этим моделям. Я хочу убедиться, что Users может получить доступ только к своим собственным данным. В наборах представлений я могу ограничить наборы запросов только теми объектами, которыми "владеет" пользователь, следующим образом:

views.py

class BankViewSet(...):

    def get_queryset(self):
        return self.queryset.filter(
            user = request.user
        )

И я могу сделать то же самое для Accounts.

Однако, как я могу запретить пользователю создавать Account через POST запрос с Bank, которым он не владеет? Я хочу убедиться, что пользователи могут создавать только Accounts, принадлежащие Bank, которыми они владеют.

Как я могу обеспечить/проверить, что Bank в POST-запросе Account содержит того же пользователя, что и запрашивающий?

Вы можете создать проверку на уровне поля на классе AccountSerializer, как

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = (
            "bank",
            "field_1",
            "field_2"
        )

    def validate_bank(self, bank_instance: Bank):
        if bank_instance.user == self.context["request"].user:
            return bank_instance
        raise serializers.ValidationError("Not belongs to you!!!")
Вернуться на верх