Django REST框架关系所有者

时间:2014-09-15 15:41:31

标签: django django-rest-framework

我正在尝试使用Django REST框架创建对象。一切正常,除了检查关系的所有者。我可以插入不属于我的关系行。示例模式:

汽车:

  • ID
  • 名称
  • CATEGORY_ID
  • USER_ID

类别:

  • ID
  • 名称
  • USER_ID

我可以使用我当前的用户ID插入汽车(它在pre_save中填充),但类别ID可以是任何存在的(它不会检查类别的user_id)。我怎么能这样做?

1 个答案:

答案 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