TLDR;
如何提供封装在字段类中的自定义、模型级别、字段验证?
其余的部分
我正在玩两个 JSONField 实现,(第一个,第二个)。我正在为我的应用程序使用 Django 和 Django REST 框架的组合。我没有在表单级别做任何事情,只有一个暴露模型的 Web API。
理想情况下,我想在一个地方编写此验证,并使其在序列化程序级别 + 模型级别上运行(例如当我通过 a 时validators=[x]
)。我不能使用通常的validators=[x]
,因为我需要允许blank=True
但还要验证空白值类型:|。
我有一个用例,我想验证我的JSONField
. 使用validictory,我可以这样做:
- 强行拨打
self.full_clean()
我的电话save()
- 覆盖
clean()
我的模型并在那里进行验证
但是,我真正想做的是:将此验证添加到JSONField
. 我想离开尽可能多的父Field
类来做这件事。到目前为止,我有:
from django.db import models
from jsonfield import JSONField
class myValidatorField(JSONField):
def validate(self, *args, **kwargs):
# do some validation here
super(myValidatorField, self).validate(*args, **kwargs)
class MyModel(models.Model):
jsonstuff = myValidatorField(default=[])
def save(self, *args, **kwargs):
self.full_clean()
super(MyModel, self).save(*args, **kwargs)
但是,我无法让它工作。此validate()
方法不会在第二个实现中运行,而对于第一个,它会运行 4 次。
使困惑。