我有两个父子关系的模型:
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请求创建Account
与Bank
,他们不拥有?我想确保用户只能创建属于他们拥有的Bank
的Accounts
。
我如何强制/检查Account
POST请求中的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!!!")