小编Gab*_*abi的帖子

Django REST Framework自定义字段验证

我正在尝试为模型创建自定义验证,以检查它start_date是否在它之前end_date并且证明几乎不可能.

我试过的东西:

  • 内置的Django验证器:没有检查这个

  • 写我自己的,像这样:

    def validate_date(self):
       if self.start_date < self.end_date:
            raise serializers.ValidationError("End date must be after start date.")
    
    Run Code Online (Sandbox Code Playgroud)

我已经添加到Serializer类(然后是模型)的那段代码,但似乎没有在任何一个位置调用它.

我也发现这个代码,可能是使用的位,但我不知道如何在我的方法-整合似乎是它的工作来验证一个模型属性,但我需要两个属性之间的检查.

我的模特:

class MyModel(models.Model):

    created = models.DateTimeField(auto_now_add=True)
    relation_model = models.ForeignKey(RelationModel, related_name="mymodels")
    priority = models.IntegerField(
        validators = [validators.MinValueValidator(0), validators.MaxValueValidator(100)])
    start_date = models.DateField()
end_date = models.DateField()

    @property
    def is_active(self):
        today = datetime.date.today()
        return (today >= self.start_date) and (today <= self.end_date)

    def __unicode__(self):
        ...

    class Meta:
        unique_together = ('relation_model', 'priority', 'start_date', 'end_date')
Run Code Online (Sandbox Code Playgroud)

Fyi,所有其他验证工作!

我的序列化器:

class MyModelSerializer(serializers.ModelSerializer):

    relation_model = …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

59
推荐指数
6
解决办法
5万
查看次数

标签 统计

django ×1

django-rest-framework ×1