2016-04-27 46 views
1

驗證字段時持續數據我有一個具有「device_date」一個Django模型項目DateTimeField字段閱讀在DRF

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

我使用DRF,所以我有一個串行這種模式:

class ItemSerializer(serializers.ModelSerializer): 

當我更新一個項目(PUT方法)時,我想檢查客戶端發送的'device_date'是否大於它已經在數據庫中的'device_date'。如果收到的'device_date'不比現有的'device_date'大,那麼服務器應該回復一個HTTP 400錯誤並且不保留該對象。如果我在這串

def validate_device_date(self, value): 

定義validate方法我可以通過客戶端發送的值,但我不知道怎麼去這已經是在DB值。是否有可能使用驗證方法進行此檢查,還是應該嘗試其他方式來執行此操作?

感謝

回答

0

你可以訪問現有的device_dateself.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