Как сохранить верхний предел для бесконечного DecimalRangeField - PullRequest
1 голос
/ 27 апреля 2020

из django .contrib. postgres .fields import DecimalRangeField Django3 и Postgres11

Мне нужно хранить inf в DecimalRangeField()

from django.contrib.postgres.fields import DecimalRangeField
from psycopg2.extras import NumericRange

class Premium(models.Model):
     sum_insured = DecimalRangeField()

NumericRange с небольшим номером работает

    def test_range_field(self):
        Premium.objects.create(
            sum_insured=NumericRange(3, 12),
        )
        self.assertEqual(1, Premium.objects.count())

Задача:

Premium.objects.create(
   sum_insured=NumericRange(3, float('inf'))
)

Возникает ошибка

django.db.utils.ProgrammingError: syntax error at or near "Infinity"

Вопрос :
Как сохранить inf в DecimalRangeField?

1 Ответ

1 голос
/ 27 апреля 2020

A NumericRange объект является специальной формой Range объекта . Как указано в документации, для параметров lower и upper:

lower - нижняя граница диапазона. None означает несвязанный

upper - верхняя граница диапазона. None означает несвязанный

Если для lower или upper установлено значение None (например, не указав его), вы определяете интервал, в котором lower или верхний переводится в бесконечность соответственно.

Таким образом, вы можете определить это с помощью:

Premium.objects.create(
   sum_insured=<b>NumericRange(3, None)</b>
)

или короче:

Premium.objects.create(
   sum_insured=<b>NumericRange(3)</b>
)
...