Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-在FloatField中不允许NaN和无穷大_Python_Django_Postgresql - Fatal编程技术网

Python Django-在FloatField中不允许NaN和无穷大

Python Django-在FloatField中不允许NaN和无穷大,python,django,postgresql,Python,Django,Postgresql,如何在Django中创建一个不允许保存NaN值或无穷大值(同时仍然允许空值)的浮动字段——即: class MyModel(models.Model): rate = models.FloatField(null=True, nans=False) # ??? 我使用Postgres作为后端。如果通用解决方案不存在,可能存在Postgres特定的解决方案?您可以将其作为约束添加,也可以创建一个类型或域,该类型或域可以多次使用 您可以创建自己的自定义字段: from django.db

如何在Django中创建一个不允许保存NaN值或无穷大值(同时仍然允许空值)的
浮动字段
——即:

class MyModel(models.Model):
    rate = models.FloatField(null=True, nans=False) # ???

我使用Postgres作为后端。如果通用解决方案不存在,可能存在Postgres特定的解决方案?

您可以将其作为约束添加,也可以创建一个类型或域,该类型或域可以多次使用



您可以创建自己的自定义字段:

from django.db import models

class HandField(models.FloatField):

    description = "Custom FloatField"

    def check(self, **kwargs):
        errors = super().check(**kwargs)
        errors.extend(self._check_custom_format())
        return errors

def _check_custom_format(self):
    local_errors
    #Here you should check if the format is correct.
    #If something is not right, you should add an error object (from django.core.checks) to local_errors
    return local_errors
错误对象:

checks.Error(
                    'Some error',
                    obj=self,
                    id='Some id',
                )
我还没有尝试过编码,它是基于IntegerField的


最好知道Django是否有现成的解决方案,可以创建必要的约束条件,这样我就不必手动创建约束条件。评论不错)无需在此处创建huci buci谢谢!这部分地解决了我的问题,也就是说,如果我不通过Django将数据添加到数据库中,它仍然可能是无效的。如何在DB级别施加非NaN约束?
from django.db import models

class HandField(models.FloatField):

    description = "Custom FloatField"

    def check(self, **kwargs):
        errors = super().check(**kwargs)
        errors.extend(self._check_custom_format())
        return errors

def _check_custom_format(self):
    local_errors
    #Here you should check if the format is correct.
    #If something is not right, you should add an error object (from django.core.checks) to local_errors
    return local_errors
checks.Error(
                    'Some error',
                    obj=self,
                    id='Some id',
                )