我正在尝试使用Django REST框架创建对象。一切正常,除了检查关系的所有者。我可以插入不属于我的关系行。示例模式:
我可以使用我当前的用户ID插入汽车(它在pre_save中填充),但类别ID可以是任何存在的(它不会检查类别的user_id)。我怎么能这样做?
答案 0 :(得分:0)
如果我错了,请纠正我,但您现在可以插入任何类别ID的Car对象,但是您想要强制插入的任何Car对象都有一个user_id为的类别等于Car对象中的user_id。
您可以通过序列化程序中的object level validation进行此验证。由于您要进行的验证取决于多个字段的值,因此您希望覆盖Car模型的序列化程序类中的对象级验证方法:
def validate(self, data):
cat_id = data['category_id']
# You may have to change the below line depending on how user_id is determined
user_id = self.context['request'].user.id
try:
category = Category.objects.get(id=cat_id)
if category.user_id != user_id:
raise ValidationError({'category_id': 'Category must belong to the user'})
except Category.DoesNotExist:
# Do something
raise ValidationError({'category_id': 'invalid id'})
return data