我有这样的字段
coordinates = Tuple(
(Float(), Float()),
required=True,
)
内部坐标两个值:纬度和经度
我应该验证这些字段是否遵循以下条件"坐标":((-90.0, 90.0), (-180.0, 180.0))
有人知道怎么做吗? 我使用棉花糖图书馆
多谢
您可以使用@validates
装饰器编写验证函数:
from marshmallow import fields, Schema, validates, ValidationError
class CoordinatesSchema(Schema):
coordinates = fields.Tuple(
(fields.Float(), fields.Float()),
required=True,
)
@validates("coordinates")
def validate_coordinates(self, value):
if value[0] not in (-90.0, -180.0):
raise ValidationError("The first coordinate can only be -90.0 or -180.0.")
if value[1] not in (90.0, 180.0):
raise ValidationError("The second coordinate can only be 90.0 or 180.0.")
coords = {"coordinates": (-90.0, 180.0)}
CoordinatesSchema().load(coords) # OK
coords = {"coordinates": (70.0, 180.0)}
try:
CoordinatesSchema().load(coords) # ValidationError
except ValidationError as err:
print(err.messages) # 'coordinates': ['The first coordinate can only be -90.0 or -180.0.']}
请注意,使用上述validate_coordinates
函数,如果第一个和第二个坐标都无效,则只会报告第一个坐标。可以通过添加一个额外的if
来检查两个坐标是否无效来解决此问题。