您可以使用required包进行跨场验证。它允许你用python声明性地表达你的验证规则。您将有这样的事情与DRF:
class MySerializer(serializers.Serializer):
REQUIREMENTS = (
Requires("end_date", "start_date") +
Requires("end_date", R("end_date") > R("start_date")) +
Requires("end_date", R("end_date") < today.date() + one_year) +
Requires("start_date", R("start_date") < today.date() + one_year)
)
start_date = serializers.DateField(required=False, null=True, blank=True)
end_date = serializers.DateField(required=False, null=True, blank=True)
def validate(self, data):
self.REQUIREMENTS.validate(data) # handle validation error
你可以把你的模型中REQUIREMENTS
并同时拥有您的DRF和Django表单使用它验证您的数据。
Here是博客文章解释更多
关于哪个对象?我在模型基类中没有看到类似的东西... – AnotherHowie
这个答案在DRF'ModelSerializer'子类的上下文中。尽管在Django模型中存在类似的情况,但对于'clean_myfield'和'clean'方法。你是通过DRF发布还是不是......? – wim
是和不是。我有一个DRF API,但也有一个表单发布到的视图。 – AnotherHowie