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做同样的事情。

然而,我怎么能阻止用户通过POST请求创建AccountBank,他们不拥有?我想确保用户只能创建属于他们拥有的BankAccounts

我如何强制/检查AccountPOST请求中的Bank包含与请求者相同的用户?

您可以在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!!!")

最新更新