如何在Python/Django模型字段上强制使用正数?
我正在使用Django和Python 3.7。我也在使用Postgres9.6。我的模型中有以下字段如何在Python/Django模型字段上强制使用正数?,django,python-3.x,postgresql,model,numbers,Django,Python 3.x,Postgresql,Model,Numbers,我正在使用Django和Python 3.7。我也在使用Postgres9.6。我的模型中有以下字段 class ArticleStat(models.Model): ... score = models.FloatField(default=0, null=False) 是否有任何方法可以写入约束,以便在生成迁移时,基础数据库将强制执行始终等于或大于零的FloatField?我不希望这个字段中有任何负数。不幸的是,django中没有正数字段。但是你可以用 MinValueV
class ArticleStat(models.Model):
...
score = models.FloatField(default=0, null=False)
是否有任何方法可以写入约束,以便在生成迁移时,基础数据库将强制执行始终等于或大于零的FloatField?我不希望这个字段中有任何负数。不幸的是,django中没有
正数字段。但是你可以用
MinValueValidator
code:
class MinValueValidator(BaseValidator):
message = _('Ensure this value is greater than or equal to %(limit_value)s.')
code = 'min_value'
def compare(self, a, b):
return a < b # super simple.
注意:django验证不会自动运行。因此,您必须运行obj.clean\u fields()
或obj.clean()
。检查这个
如前所述,您应该使用:MinValueValidator。去检查一下,这并不能回答问题。这将应用验证器,但不会在数据库级别强制执行约束,至少不会对我使用的数据库类型执行约束。去看看吧,谢谢你提供的信息。根据我对另一个人的评论,我想知道是否有办法运行迁移并让PostGres强制实施positive约束。当我尝试添加MinValidator时,没有向PostGres表添加新的约束。Validator是django的逻辑,独立于数据库。正如我在回答中所说的,由于没有PositiveFlotField,所以通过django建立数据库将很困难@戴夫
class YourModel(models.Model):
po_float = models.FloatField(validators=[MinValueValidator(0)]
m = YourModel(po_float=-1)
m.clean_fields() # raise ValidationError