Szukaj…


Składnia

  • z importu django.contrib.postgres.fields * RangeField
  • IntegerRangeField (** opcje)
  • BigIntegerRangeField (** opcje)
  • FloatRangeField (** opcje)
  • DateTimeRangeField (** opcje)
  • DateRangeField (** opcje)

W tym numeryczne pola zakresu w twoim modelu

Istnieją trzy rodzaje numerycznych RangeField w Pythonie. IntegerField , BigIntegerField i FloatField . Konwertują na psycopg2 NumericRange , ale akceptują dane wejściowe jako rodzime krotki Pythona. Dolna granica jest uwzględniona, a górna granica jest wykluczona.

class Book(models.Model):
    name = CharField(max_length=200)
    ratings_range = IntegerRange()

Konfiguracja RangeField

  1. dodaj 'django.contrib.postgres' do swojego INSTALLED_APPS
  2. zainstaluj psycopg2

Tworzenie modeli z numerycznymi polami zakresu

Prostsze i łatwiejsze jest wprowadzanie wartości jako krotki Python zamiast NumericRange .

Book.objects.create(name='Pro Git', ratings_range=(5, 5))

Alternatywna metoda z NumericRange :

Book.objects.create(name='Pro Git', ratings_range=NumericRange(5, 5))

Korzystanie zawiera

To zapytanie wybiera wszystkie książki o dowolnej ocenie mniejszej niż trzy.

bad_books = Books.objects.filter(ratings_range__contains=(1, 3))

Korzystanie z zawartych_przez

To zapytanie powoduje, że wszystkie książki z ocenami większymi lub równymi zero i mniejszymi niż sześć.

all_books = Book.objects.filter(ratings_range_contained_by=(0, 6))

Korzystanie z nakładania się

To zapytanie powoduje, że wszystkie nakładające się spotkania są od sześciu do dziesięciu.

Appointment.objects.filter(time_span__overlap=(6, 10))

Użycie None oznacza brak górnej granicy

To zapytanie wybiera wszystkie książki o dowolnej ocenie większej lub równej czterech.

maybe_good_books = Books.objects.filter(ratings_range__contains=(4, None))

Zakresy operacji

from datetime import timedelta

from django.utils import timezone
from psycopg2.extras import DateTimeTZRange

# To create a "period" object we will use psycopg2's DateTimeTZRange
# which takes the two datetime bounds as arguments
period_start = timezone.now()
period_end = period_start + timedelta(days=1, hours=3)
period = DateTimeTZRange(start, end)

# Say Event.timeslot is a DateTimeRangeField

# Events which cover at least the whole selected period,
Event.objects.filter(timeslot__contains=period)

# Events which start and end within selected period,
Event.objects.filter(timeslot__contained_by=period)

# Events which, at least partially, take place during the selected period.
Event.objects.filter(timeslot__overlap=period)


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow