在DRF中验证字段时读取持久数据

时间:2016-04-27 21:53:29

标签: django django-rest-framework

我有一个Django模型项目,其中包含' device_date' DateTimeField字段

class Item(models.Model):
    ...
    device_date = models.DateTimeField()

我正在使用DRF,所以我有一个针对此型号的Serializer:

class ItemSerializer(serializers.ModelSerializer):

当我更新项目(PUT方法)时,我想检查' device_date'客户发送的信息比它已经存在于数据库中的信号要大。如果收到' device_date'并不是现有的,服务器应该回复HTTP 400错误并且不会持久化该对象。如果我在此序列化程序中定义了验证方法

def validate_device_date(self, value):

我可以获得客户端发送的值,但我不知道如何获取数据库中已有的值。是否可以使用验证方法进行此检查,或者我应该尝试不同的方法来执行此操作?

由于

1 个答案:

答案 0 :(得分:1)

您可以从device_date

访问现有的self.instance
def validate_device_date(self, value):

    if self.instance.pk:
        if value <= self.instance.device_date:
            raise ValidationError('Your custom exception message')

    return value

您需要在比较之前检查实例是否存在,这样您就不会在创建新项目时引发错误。

另请注意,这不会引发HTTP 400,但会报告ValidationError