我有一个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):
我可以获得客户端发送的值,但我不知道如何获取数据库中已有的值。是否可以使用验证方法进行此检查,或者我应该尝试不同的方法来执行此操作?
由于
答案 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
。