这是Pony ORM可以做的事情:
class Business(db.Entity):
name = Required(str)
latitude = Optional(float, py_check=lambda val: -90 <= val <= 90)
longitude = Optional(float, py_check=lambda val: -180 <= val <= 180)
我正在尝试确定是否有其他人(SQLAlchemy,SQLObject等)可以执行此操作。尤其是可以在框架中用作库的那些。 (所以,我不确定在非Django应用程序中使用Django ORM需要做多少工作。)
我很难在各种文档中找到此功能,但我确信他们支持它。
所以我的问题:这些(或其他)ORM是否支持必需与可选属性和验证?如果是这样,怎么样?
答案 0 :(得分:2)
我也不确定您是否想在非Django应用中使用Djano ORM,但为了记录,您可以使用内置功能进行操作。 Django的:
from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
class Business(models.Model):
name = models.TextField()
latitude = models.FloatField(null=True, blank=True,
validators=[MinValueValidator(-90), MaxValueValidator(90)])
longitude = models.FloatField(null=True, blank=True,
validators=[MinValueValidator(-180), MaxValueValidator(180)])
答案 1 :(得分:1)
使用SQLAlchemy:是
nullable = False/True
下面的代码使用Flask,但纯sqlalchemy代码几乎相同:
class Business(db.Model):
__tablename__ = 'business'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
latitude = db.Column(db.Float, nullable=True)
longitude = db.Column(db.Float, nullable=True)
@db.validates('latitude')
def validate_lat(self, key, value):
assert value is None or (-90 <= value <= 90)
return value
@db.validates('longitude')
def validate_lon(self, key, value):
assert value is None or (-180 <= value <= 180)
return value
正如@ kevin-christopher-henry已经指出的那样,使用Django ORM和非Django框架,以及相反的方法几乎没有意义:如果你使用Django,那么更容易坚持使用Django ORM。
答案 2 :(得分:1)
Peewee不支持验证程序作为ORM的一部分,但是您可以使用Field.null
来指示字段是否需要具有值。