Django
RangeFields: un gruppo di campi specifici di PostgreSQL
Ricerca…
Sintassi
- dall'importazione django.contrib.postgres.fields * RangeField
- IntegerRangeField (** opzioni)
- BigIntegerRangeField (** opzioni)
- FloatRangeField (** opzioni)
- DateTimeRangeField (** opzioni)
- DateRangeField (** opzioni)
Compresi i campi dell'intervallo numerico nel modello
Ci sono tre tipi di RangeField
numerici in Python. IntegerField
, BigIntegerField
e FloatField
. psycopg2
in psycopg2
NumericRange
s, ma accettano input come tuple Python native. Il limite inferiore è incluso e il limite superiore è escluso.
class Book(models.Model):
name = CharField(max_length=200)
ratings_range = IntegerRange()
Impostazione per RangeField
- aggiungi
'django.contrib.postgres'
ai tuoiINSTALLED_APPS
- installa
psycopg2
Creazione di modelli con campi intervallo numerico
È più semplice e più semplice inserire valori come una tupla Python invece di un NumericRange
.
Book.objects.create(name='Pro Git', ratings_range=(5, 5))
Metodo alternativo con NumericRange
:
Book.objects.create(name='Pro Git', ratings_range=NumericRange(5, 5))
L'utilizzo contiene
Questa query seleziona tutti i libri con una valutazione inferiore a tre.
bad_books = Books.objects.filter(ratings_range__contains=(1, 3))
Utilizzando contenuto_by
Questa query ottiene tutti i libri con valutazioni superiori o uguali a zero e inferiori a sei.
all_books = Book.objects.filter(ratings_range_contained_by=(0, 6))
Usando la sovrapposizione
Questa query ottiene tutti gli appuntamenti sovrapposti da sei a dieci.
Appointment.objects.filter(time_span__overlap=(6, 10))
Usando Nessuna per indicare nessun limite superiore
Questa query seleziona tutti i libri con una valutazione superiore o uguale a quattro.
maybe_good_books = Books.objects.filter(ratings_range__contains=(4, None))
Varia le operazioni
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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow